Отключенное поведение Entity Framework при обновлении графа объектов
В настоящее время я работаю с проектом, в котором используются следующие технологии.
ASP.net MVC - presentation Layer Data Service Layer - (WCF) Data Transfer Objects(DTO) Layer with Auto Mapper Domain Layer (POCO, Code First Entity Framework) Repository Layer + Entity Framework 4.3 + DbContext.Мы используем DTO для преобразования объектов домена наоборот с помощью автоматического сопоставления и отправки во внешний интерфейс с помощью службы WCF.
Кроме того, мы создаем DBContext для каждого запроса на уровне WCF для каждого запроса, и наш контекст службы WCF создается с помощью функции «За вызов» и «Без отслеживания» в клиентских DTO и полностью отключен.
Также у нас есть следующий граф объектов.
public class User : BaseEntity
{
public virtual Identity Identity { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public int IdentityId { get; set; }
public virtual IList<Group> Groups{ get; set; }
}
public class Identity : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual IList<Email> Emails { get; set; }
public virtual IList<PhoneNumber> PhoneNumbers { get; set; }
}
Наша структура Dto больше похожа на доменную.
Мои вопросы:
Когда дело доходит до обновления графа объекта Например:UpdateUser(User user); Каков наилучший подход с Entity Framework?
Теперь мы используем отдельные функции для сохранения навигационных данных, например:UpdateEmail(userId, Email)(сохраняет только примитивные данные, а не отношения); так что он делает много вставок и обновлений в базе данных, когда мы рассматриваем один UnitOfWork.
Текущая реализация следующим образом
public void UpdateUser(User user)
{
UpdateEmail(user.userId, user.Idenity.Emails);
UpdatePhone(user.userId, user.Identity.PhoneNumbers);
etc.............
UpdateUser(user);
UnitOfWork.Commit();// Calling DbContext.SaveChanges();
}
Есть ли какой-либо шаблон или лучшие практики, которые мы можем использовать с Entity Framework в описанной выше ситуации с отключенным графом объектов?