我目前正在与使用下列技术的一个项目工作。
- ASP.net MVC - 表现层
- 数据服务层 - (WCF)
- 数据传输对象(DTO)与自动映射图层
- 领域层(POCO,代码第一次实体框架)
- 库层+实体框架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两个(用户用户); 什么是实体框架的最佳方法?
现在我们用单一的功能来保存资料导航EX:UpdateEmail(用户ID,电子邮件)(仅保存原始数据没有关系); 所以这让很多在数据库中插入和更新时,我们考虑一个的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();
}
有没有办法,我们就可以在上述情况与实体框架使用与断开连接的对象图中的任何模式或最佳实践?