Как проверить, заполнен ли дочерний объект объекта linq или нет? Пример кода ниже.Как проверить, заполнен ли дочерний объект
Моя модель имеет два метода, один соединяет данные, а другой нет:
public static Member GetMemberWithPhoto(Guid memberId)
{
using (DataContext db = new DataContext())
{
DataLoadOptions dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith<Member>(x => x.UserPhoto);
db.LoadOptions = dataLoadOptions;
var query = from x in db.Members
where x.MemberId == memberId
select x;
return query.FirstOrDefault();
}
}
public static Member GetMember(Guid memberId)
{
using (DataContext db = new DataContext())
{
var query = from x in db.Members
where x.MemberId == memberId
select x;
return query.FirstOrDefault();
}
}
Тогда мой управления имеют следующий код:
Member member1 = Member.GetMemberWithPhoto(memberId);
Member member2 = Member.GetMember(memberId);
Debug.WriteLine(member1.UserPhoto.ToString());
Debug.WriteLine(member2.UserPhoto.ToString());
Последняя строка будет генерировать «не может доступ к удаленному объекту ". Я знаю, что я могу избавиться от этого исключения, просто не удалив datacontext, но тогда последняя строка создаст новый запрос к базе данных, и я не хочу этого.
Что я хотел бы что-то вроде:
Debug.WriteLine((member1.UserPhoto.IsPopulated()) ? member1.UserPhoto.ToString() : "none");
Debug.WriteLine((member2.UserPhoto.IsPopulated()) ? member2.UserPhoto.ToString() : "none");
Возможно ли это?
Вы, конечно, правильно. Я только что понял, что код, с которым я столкнулся, не является сущностью, а отношением «один к одному» в базе данных. Я соответствующим образом обновил этот вопрос. – TheQ
Что представляет собой аксессуар свойств для взаимно однозначного? Получает ли он доступ к полю типа EntityRef? Если это так, вы можете создать другое свойство IsUserPhotoPopulated (возможно, в частичном классе), которое выполняет проверку в поле следующим образом: _userPhoto.HasLoadedOrAssignedValue. Или измените логику геттера, чтобы выполнить эту проверку, хотя она будет перезаписана при регенерации вашей модели сущности (если она была автоматически сгенерирована). –
luksan
Объекты Member и UserPhoto автоматически генерируются из соответствующих таблиц через dbml-файл в visual studio, и насколько я могу судить, нет EntityRef где угодно. Я мог бы создавать новые свойства в частичных классах, но я не знаю, поможет ли это. Я мог бы изменить логику запросов, но это большой проект с большим количеством старого кода, некоторые присоединяются к данным, а некоторые нет, поэтому я предпочел бы, если будет существовать другой метод. –
TheQ