Рассмотрим следующие (очень упрощенно) объектов:Entity Framework ленивая загрузка неправильная организация
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Answer
{
public int Id { get;set; }
public virtual User User { get; set; }
public string Text { get;set }
}
public class TeamMember
{
public int Id { get;set; }
public virtual User User { get; set; }
public string Role { get; set; }
}
В моем картографа я могу установить штраф пользователя, но как только выполняется следующий код (до каких-либо изменений сохраняется в БД)
if (teamMembers.Select(x => x.User).Contains(currentUser))
где teamMembers является список teamMembers и CurrentUser является объект пользователя загружается из дб, то свойство User ответа устанавливается предыдущее значение из базы данных. Мое понимание заключается в том, что, поскольку я еще не получил доступ к свойству User для ответа до того, как он еще не загружен из базы данных, и это то, что происходит (он был ленивый загружен?).
Я мог бы исправить это, прочитав Пользователь, даже не установив его в mapper, но то, что я не могу понять, - это почему, когда я обращаюсь к свойству User TeamMember, загружается и устанавливается свойство User Answer? Является ли это ожидаемым поведением, поскольку оба объекта связаны с одним и тем же пользователем (т. Е. В базе данных они имеют один и тот же User_Id как внешний ключ), а при загрузке для TeamMembers EF пытается быть умным и заполнять другие объекты, которые ссылаются на него, еще не загружены?
Спасибо за ваш ответ, но он не полностью отвечает на мой вопрос (возможно, недостаточно ясен). Предположим, что у меня есть два пользователя: 'User1 {}' и 'User2 {}'. Может ли кто-нибудь объяснить, почему это так, когда я устанавливаю значение 'answer.User' с' User1 {} 'на' User2 {} ', а затем без сохранения запускает select (например,' teamMembers.Select (x => x .User) .Contains (currentUser) ') в моей коллекции teamMembers, а затем возвращает свойство пользователя моего ответа обратно в' User1 {} '? – msokrates
Был ли пользователь2 уже сохранен в базе данных или он только «в памяти» в этот момент? –
Я установил answer.User для User2 (который я извлекаю из базы данных), но не сохраняю это изменение, если это то, что вы имеете в виду. – msokrates