我目前正在处理一个使用以下技术的项目。
我们使用 DTO 使用自动映射器将域对象进行反向转换,并使用 WCF 服务发送到前端。
此外,我们正在为每个请求在 WCF 层中创建基于每个请求的 DBContext,我们的 WCF 服务上下文由客户端 DTO 中的 Per Call 和 No Tracking enable 构建,并且完全断开连接。
我们还有以下对象图。
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 结构更像是相同的。
我的问题:
更新对象图例如:更新用户(用户用户) ; 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 一起使用?
最佳答案
没有多少选项可以解决它。 EF doesn't have any direct suppor t 用于更新断开连接的对象图。您必须编写更新逻辑,通常有两种方法可以做到:
ChangeTracker
对于每个接收到的实体。 关于asp.net-mvc-3 - 更新对象图时 Entity Framework 的断开行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078126/