Не привязывайте типы сущностей к вашему интерфейсу. Это связывает пользовательский интерфейс с уровнем сущности. Загрузка будет наименьшей из ваших проблем. При использовании связанного пользовательского интерфейса вы нарушаете принцип единой ответственности, требует, чтобы черные списки / белые списки поддерживались в любой форме безопасности, типы разрывов, которые не могут работать с циклическими ссылками, у вас низкая производительность, поскольку вы загружаете все поля из всех связанных типов и т. д. и т. п.
Вместо этого создайте выделенную модель вида и спроецируйте на нее:
var pm = (from e in Context.Employees
where e.Id == id
select new EmployeePresentation
{
EmployeeNumber = e.Number,
Name = e.Person.Name,
// etc.
}.First();
Поскольку это LINQ to Entities, поля, на которые вы ссылаетесь в Person и т. Д., Загружаются автоматически, не требуя активной загрузки, отложенной загрузки или явной загрузки (). Но только эти поля, а не вся Персона , как с любым другим методом.
Обновление, по комментариям
Использование моделей презентации также важно для обновления. Это не тот случай, когда я хочу, чтобы пользователь мог обновлять каждое поле, которое он может видеть. Различные модели представления для одной и той же сущности могут иметь разные правила проверки / создания леса, поскольку они используются в разных точках потока данных в приложении. Кроме того, пользователь должен неявно обновлять поля, которые он не может видеть (например, отметка времени).
Обычно мои обновления выглядят так (веб-приложение ASP.MVC):
public ActionResult Update(EmployeePresentation model)
{
if (!ModelState.IsValid)
{
// User violated validation rule on presentation model.
return View(model);
}
Repository.Update(model.Id, delegate(Employee employee)
{
model.UpdateEmployee(employee);
});
return RedirectToAction("Index");
}
Обратите внимание, что пользователь никогда не сможет обновить что-либо, что ему не разрешено, проверенным типом, безопасным для типов способом, и что привязка модели, модель презентации и хранилище могут быть расширены для настраиваемого поведения. .