我正在使用Entity-Framework和DDD。
如果我在两个实体之间有引用,我该如何处理持久性?做更新级联?
假设雇主直接提及他们的经理。
如果我更改Employee.Manager.Name并保存员工,管理员的名称是否会更改?
答案 0 :(得分:5)
从DDD的角度来看,Manager
中Employee
的任何链接都应该仅引用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
实例,但这会打开许多其他问题(例如:他们不知道彼此的更改)。