我正在努力解决如何在多个Visual Studio项目中打破域模型的最佳方法。我正在使用EntityFramework 4和企业类型模式来合理化一个可以重用于各种应用程序的系统。最终,我想得到一组混合和匹配的DLL类库,可以在Web应用程序中重用。
Sor far,我有一个标准的数据库架构,其中包含用户信息,基本CRM,基本CMS以及轻量级电子商务平台。
CRM /用户表是系统的核心。 CMS和电子商务平台使用CRM用户表。我想定义一个核心域模型,CMS和电子商务领域模型从中链接/派生。
到目前为止,我有三个视觉工作室项目:
在每个模型中都有一个Entity Framework Domain Model EDMX文件。 EDMX包含每个的所有相关表。这意味着CMS和Commerce项目的EDMX文件包含一些用户表。理论上我可以有一个大的EF模型并将所有POCO放在一个类中,但这不是很容易扩展。
项目还包含每个表的POCO(这些可能在一个单独的项目中,但在事情分类之前,它们可以保持原样!)。
当我在具有工作单元的服务层中使用域模型时,我只想使用一个ObjectContext(这实际上是一个以EF ObjectContext为目标的IObjectContext包装器)。出于这个原因,我为每个EDMX文件提供了相同的实体容器名称和命名空间。
问题:
答案 0 :(得分:1)
公平点,一些评论:
据我所见,这是最大的问题。我想可以通过使用(例如)适当的CRM.Person和适当的Commerce.Person来实现。我认为我想要实现的是一个普通的POCO模型,EF域模型位于其下方。我不太关心EF模型是如何构建的,除了它应该是合理的结构。
再次,下一个最大的问题。通过在不同的上下文中具有重复实体来解决某种程度,但这意味着某些导航属性不可用。例如,CRM.Person不会拥有Commerce.Person所拥有的订单,运输等属性,即使他们是数据库中的“相同”人员。
基于反射的逻辑(目前)对我来说并不重要。
同意。因此,为什么我想以某种方式走向一个上下文
工作单元实际上是一个IUnitOfWork,并且被存入存储库并且需要独立于EF。
不同意。我们的想法是建立一个核心应用程序,必要时可以扩展。例如,未来的项目可能涉及剧院预订。这将与Commerce核心绑定,但我不想重新编程Commerce应用程序来解释它。就我而言,重建EDMX模型并不理想。可能是唯一的方法。
答案 1 :(得分:0)
EF很新,几乎每个人都喜欢你在试验并找到创造更好系统的新方法。所以不会有任何直接的答案,但我可以把我的想法和我已经遇到的问题放在一边。
多个EDMX的问题
如果我要将所有内容存储在一个数据库中,我将其视为一个存储库。