当前位置 : 主页 > 手机开发 > 其它 >

entity-framework-4 – 实体框架4和ddd中的EAV

来源:互联网 收集:自由互联 发布时间:2021-06-22
我的数据库中的一些表是使用EAV概念设计的. 然后我使用自动生成的实体,并将ORM实体框架的“静态”表(不是“EAV”表)表示为DDD对象. 如何使用Entity Framework在对象模型中使用我的“EAV”
我的数据库中的一些表是使用EAV概念设计的.
然后我使用自动生成的实体,并将ORM实体框架的“静态”表(不是“EAV”表)表示为DDD对象.

>如何使用Entity Framework在对象模型中使用我的“EAV”实体(不像在数据库中那样关联)?

例如,
在数据库中我有静态表Report和EAV表,它们帮助我存储ReportProperty for Report.
在域模型中我想要像这样的报告:

Report
{
     ICollection<ReportProperty> ReportProperties{get;set;}
}

我可以使用由Entity Framework生成的Report实体和部分部分
在getter中实现一些逻辑,用于从我的EAV表中检索数据以填充Collection ReportProperies.然后它回答下一个问题.

>如果我决定使用NHibernate而不是Entity Framework,我该怎么办,因为我不能使用我已经实现使用Entity Framework的部分部分?

如果我将使用DDD对象,我可以用于Entity Framework或NHibernate,对我来说很难,因为我需要在我的DAO中的每个过程中调用映射程序.

EAV是数据访问层的概念,而DDD是业务逻辑层的概念.像Entity Framework或NHibernate这样的ORM诱惑我们将这两个层混合在一起,但在具有复杂逻辑的复杂项目中(这是需要DDD的地方),这绝不会发生.所以划分你的Dal和Bll.为您的DDD对象使用手工制作的类,并为Entity Framework使用自动生成(或代码优先)类,并在它们之间提供映射层.然后EAV将只是你的Dal的实现细节.如果切换到NHibernate,你的Bll和DDD类也不必改变.只是你的映射层会.顺便说一句,使用依赖倒置.让你的Dal依靠你Bll而不是相反.如果您将映射层与Entity Framework部件物理分离,则在汇编级别使用mediator模式(意味着您的映射层依赖于您的Bll和Dal,而不是任何其他方式).
网友评论