Невозможно получить значение колонки, так как она не была загружена
Есть вот такой код.
Жирным выделены строки с ошибкой
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
Но это не очень. Подсказывайте, друзья)
Нравится
Для получения из EntitySchemaQuery значений колонок по прямым связям нужно сначала эти колонки добавить. См. примеры тут:
// Создание экземпляра запроса EntitySchemaQuery с корневой схемой "City". var esqQuery = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City"); // Добавление в запрос колонки с именем контакта, который добавил страну конкретного города. esqQuery.AddColumn("Country.CreatedBy.Name");
Потом, когда будет вызван GetEntityCollection, в полученных Entity это поле будет загружено.
Кстати также попробуйте ещё алиасы использовать при добавлении таких колонок, практика подсказывает, что так намного проще.