Вопрос

Невозможно получить значение колонки, так как она не была загружена

Есть вот такой код.

Жирным выделены строки с ошибкой

 public SDDHelpOrder CaseToSDDHelpOrder(Case caseItem)

        {

            var cc = new ContactConverter(_userConnection);

            var spi = new ServicePactIntegration(_userConnection);

            return new SDDHelpOrder

            {

                guid = caseItem.Id.ToString()

               , bitrixId = caseItem.UsrBitrixId

               , subject = caseItem.Subject

               , description = caseItem.Symptoms

               , status = caseItem.Status.UsrCode

               , client = cc.ContactToSDDHelpUser(caseItem.Contact)

               , clientVote = caseItem.SatisfactionLevel.Point

               , clientVoteComment = caseItem.SatisfactionLevelComment

               , license = caseItem.ServicePactName

               , dexter_license = spi.GetDexterLicense(caseItem.ServicePactName)

               , fromSource = caseItem.OriginId.ToString()

               , agent = cc.ContactToSDDHelpUser(caseItem.Owner)

               , dateCreate = caseItem.RegisteredOn.ToString()

               , dateInWork = caseItem.RespondedOn.ToString()

               , dateCompleted = caseItem.SolutionProvidedOn.ToString()

               , dateFinish = caseItem.ClosureDate.ToString()

               , device = caseItem.UsrDeviceTypeId.ToString()

               , problem = caseItem.UsrProblemTypeId.ToString()

            };

        }

Т.е. в модели есть поле Status, например, а у него есть поле UsrCode. Я хочу красиво его получить в одну строчку. При таком написании возникает исключение "Невозможно получить значение колонки, так как она не была загружена". 

И зачем в моделях есть свойства ссылочных типов, если они не прогружаются?

Можно сделать что-то типа этого:

((CaseStatus)UsrEntityExtended.GetEntity(_userConnection, "CaseStatus", "Id", caseItem.StatusId.ToString())).UsrCode

Но это не очень. Подсказывайте, друзья)

Нравится

2 комментария

Для получения из EntitySchemaQuery значений колонок по прямым связям нужно сначала эти колонки добавить. См. примеры тут:

// Создание экземпляра запроса EntitySchemaQuery с корневой схемой "City".
var esqQuery = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City");
// Добавление в запрос колонки с именем контакта, который добавил страну конкретного города.
esqQuery.AddColumn("Country.CreatedBy.Name");

Потом, когда будет вызван GetEntityCollection, в полученных Entity это поле будет загружено.

Кстати также попробуйте ещё алиасы использовать при добавлении таких колонок, практика подсказывает, что так намного проще.

Показать все комментарии