mar*_*ker 2 wcf disconnected-environment entity-framework-4.1 asp.net-mvc-3
我目前正在使用一个使用以下技术的项目.
我们使用DTO使用自动映射器转换Domain对象,并使用WCF服务发送到前端.
此外,我们在WCF层为每个请求创建基于请求的DBContext,并且我们的WCF服务上下文由客户端DTO中的Per Call和No Tracking启用构建,并且它完全断开连接.
我们还有以下对象图.
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; }
}
Run Code Online (Sandbox Code Playgroud)
与Domain相比,我们的Dto结构更像是相同的.
我的问题:
更新对象图时例如:UpdateUser(用户用户) ; 实体框架的最佳方法是什么?
现在我们使用单个函数来保存导航数据ex: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();
}
Run Code Online (Sandbox Code Playgroud)
在上述具有断开连接的对象图的情况下,我们可以使用Entity Framework的任何模式或最佳实践吗?
解决它的选择并不多.EF没有任何直接支持来更新断开连接的对象图.您必须编写更新逻辑代码,通常有两种方法:
ChangeTracker为每个接收的实体正确配置.