Добрый день, необходимо написать веб сервис на c# и столкнулся с проблемой.
В таблице есть колонка UsrdDislocationId которая ссылается на другую таблицу. у меня есть айди по котрому надо найти запись. на данный момент я написал такой запрос.
но при этом я получаю ошибку
если програмно сделать запрос вида
то я получаю такой ответ
то есть колонка вроде как есть.
в чем может быть проблема?
спасибо!
Нравится
1. При работе с ESQ/Entity (в отличие от Select/Insert и т.п.), в фильтрах названия колонок типа справочник указываются без окончания "Id".
2. FetchFromDB, помимо того, что возвращает true/false в зависимости от того, найдена запись в БД или нет, еще и вытягивает все колонки сущности, что является избыточным для простой проверки наличия записи в таблице.
Лучше тогда уж использовать что-то в этом роде:
var select = (Select) new Select(UserConnection) .Column(Func.Count(Column.Asterisk())) .From("UsrAdressInCase") .Where("UsrdDislocationId").IsEqual(Column.Parameter(usrLookup1)); bool exists = select.ExecuteScalar<int>() > 0;
P.S.:
var exists = contact.FetchFromDB("MobilePhone", phone); - здесь тоже затягивается куча избыточной информации.
Добрый день,
Не подскажите, пожалуйста, что именно вы передаете в параметре usrlookup1? Можете также поделиться частью кода там, где мы берем его значение?
С уважением,
Дарий
Добрый вечер.
usrLookup1 это Guid.
вот полный код
var contactSchema = UserConnection.EntitySchemaManager.FindInstanceByName("Contact"); var contact = contactSchema.CreateEntity(UserConnection); var exists = contact.FetchFromDB("MobilePhone", phone); if (!exists) { return "1"; } var usrLookup1 = (Guid)contact.GetColumnValue("UsrLookup1Id"); if (usrLookup1 == Guid.Empty) { return "2"; } var usrAddressSchema = UserConnection.EntitySchemaManager.FindInstanceByName("UsrAdressInCase"); //return string.Join(",", usrAddressSchema.Columns.Select(c => c.ColumnValueName)); var usrAdressInContact = usrAddressSchema.CreateEntity(UserConnection); exists = usrAdressInContact.FetchFromDB("UsrdDislocationId", usrLookup1); if (!exists) { return "3"; }
если расскомментировать строку string.Join.... тогда получаю тот результат что выше.
я так же проверял какие колонки находятся в самой БД с помощью SQL запросов и там тоже есть UsrdDislocationId.
1. При работе с ESQ/Entity (в отличие от Select/Insert и т.п.), в фильтрах названия колонок типа справочник указываются без окончания "Id".
2. FetchFromDB, помимо того, что возвращает true/false в зависимости от того, найдена запись в БД или нет, еще и вытягивает все колонки сущности, что является избыточным для простой проверки наличия записи в таблице.
Лучше тогда уж использовать что-то в этом роде:
var select = (Select) new Select(UserConnection) .Column(Func.Count(Column.Asterisk())) .From("UsrAdressInCase") .Where("UsrdDislocationId").IsEqual(Column.Parameter(usrLookup1)); bool exists = select.ExecuteScalar<int>() > 0;
P.S.:
var exists = contact.FetchFromDB("MobilePhone", phone); - здесь тоже затягивается куча избыточной информации.