【发布时间】:2014-03-08 20:04:42
【问题描述】:
我正在使用实体框架来处理我的核心模型和数据库之间的持久性。我看不到一种在不损害我的域实体以实现持久性的情况下令人满意地使用 EF 的方法。我真的很想实现一个富领域模型,它真的不知道它的状态是如何存储的。
例如,EF 约定是将多个关系映射到虚拟 ICollections。我意识到我可以使成员受到保护,但如果核心模型和 EntityTypeConfigurations 位于不同的程序集中,这将不起作用。
我宁愿通过保护它的关联成员来保护我的模型不进入无效状态,更喜欢以下...
public class MyEntity {
private ICollection<Thing> myThings { get; set; }
public ReadOnlyCollection<Thing> MyThings { get { return myThings.AsReadOnly(); } }
public void AddThing(Thing toAdd) { // validate, etc }
}
我已经确定的可能解决方案(没有一个是我真正满意的)...
映射到 DTO,并让域实体包装它的附属 DTO,因此 DTO 有数据,实体有行为。
将 EntityTypeConfigurations 移入核心程序集。
让 Core 和 Infrastructure.Data.Ef 项目成为“朋友”并使用内部访问修饰符(我真的很讨厌这个想法)。
接受限制。让集合公开变异,并在持久化之前执行一些其他验证。
忘记 EF 并返回 ADO,NET。
还有其他想法吗?执着无知是无法实现的目标吗?
谢谢!
【问题讨论】:
-
您使用的是存储库模式吗?
-
您的域实体可以是您的 EF 实体,而无需在核心层中引用 EF 或处理内部访问修饰符,看看here
标签: c# entity-framework orm persistence domain-driven-design