我应该如何处理引用实体的持久性?

时间:2015-03-02 17:19:09

标签: c# entity-framework repository domain-driven-design

我正在使用Entity-Framework和DDD。

如果我在两个实体之间有引用,我该如何处理持久性?做更新级联?

假设雇主直接提及他们的经理。

如果我更改Employee.Manager.Name并保存员工,管理员的名称是否会更改?

2 个答案:

答案 0 :(得分:5)

从DDD的角度来看,ManagerEmployee的任何链接都应该仅引用ID(假设Managers不属于Employee聚合根,Manager本身就是一个聚合根。)

基本上,您的媒体资源Employee.ManagerId应该返回一个ID,允许您为Manager检索Employee

这将违背许多善意'您使用Entity Framework开箱即用,但这通常用于DDD。建议您围绕业务领域设计域模型,而不是数据库实现。

我个人认为,当我练习DDD时,使用EF实体作为我的领域模型并不合适。像延迟加载导航属性这样的东西与良好的DDD实践相矛盾。我倾向于在我自己的项目中使用文档数据库,但是当我必须使用SQL时,我将EF实体限制在我的持久层并编码我的存储库以从我的域模型返回非EF实体。

答案 1 :(得分:1)

假设您有通常的设置,您的应用程序使用一个DbContext:

是的,它还会保存引用的实体。

在您设置Manager名称时,它将加载Manager引用并跟踪它。通过调用DbContext.SaveChanges保存更改时,它将提交对DbContext跟踪的对象所做的所有更改。

没有此行为的唯一选择是使用多个DbContext实例,但这会打开许多​​其他问题(例如:他们不知道彼此的更改)。