Entity Framework 5,多个模型,相同的实体

Posted

技术标签:

【中文标题】Entity Framework 5,多个模型,相同的实体【英文标题】:Entity Framework 5, Multiple Models, Same Entity 【发布时间】:2013-12-15 07:58:17 【问题描述】:

好的,所以我是实体框架的新手...

我有一个现有的 SQL 数据库,其中包含大约 500 个表,我们正在考虑从 Linq->SQL 迁移到 Entity Framework 作为我们的主要数据访问层。我们还想考虑更多的领域驱动设计方法,使用单独的数据上下文管理应用程序的关键领域(即销售、营销、工作、运输等)。

如果我们采用一个常见的实体,例如“客户”,它会出现在多个模型中。到目前为止,我的示例应用程序中有两个模型。 Entity Framework 足够聪明,只创建一个客户类(我们使用默认的 Poco T4 模板进行类生成),但是当我尝试运行项目时,我收到以下错误“名称为 'Customer' 的多种类型存在于不同命名空间中的 EdmItemCollection。基于约定的映射需要唯一名称,而不考虑 EdmItemCollection 中的命名空间。

那么我认为实体框架不允许“客户”存在于多个模型中是否正确?如果我真的希望客户出现在多个模型中,我是否必须开始创建不同版本的客户类来处理它?

如果这是一个愚蠢的问题,请提前道歉,但我对 EF 比较陌生。

谢谢...

【问题讨论】:

你当然可以有两个相同的模型,但是它们不应该重叠。如果它们重叠,则 EF 将无法找到使用哪一个。 【参考方案1】:

您说您正在创建有界上下文的 DDD。在有界上下文中,您可以创建多个上下文,其中包含一个或多个相关实体。为什么要创建多个同名模型?

查看 Julie Lerman 的链接以供参考:

http://msdn.microsoft.com/en-us/magazine/jj883952.aspx

对不起,如果我脱离上下文。但是,根据我在这种情况下的经验,我们必须创建两个不同的上下文,例如“MarketingModelContext”和 SalesModelContext。 MarketingModelContext 将包含与marketingmodel 相关的所有数据库集以及客户实体。同样,SalesModelContext 将拥有与 SalesModel 相关的所有数据库集以及客户实体。这样,您将只创建一个客户实体或 POCO,它可以由两个上下文独立使用。这就是 Julie Lerman 所说的有界上下文。它将帮助您分离上下文、关注点并帮助您获得更好的性能,因为只能加载所需的上下文(更少的实体)。上面的文章将帮助您解决这个问题。

希望我已经回答了您的问题。

【讨论】:

这就是我所在的位置。我有一个项目,有两个模型。一张包含与我的营销活动相关的表格,一张与销售相关的表格。这些模型有不同的名称,即“MarketingModel”和“SalesModel”,但实体 Customer 对两者都是通用的。因此,我认为让每个模型都包含与所讨论系统的特定部分相关的实体是合乎逻辑的。我说得有道理吗? Bibek,我同意您评论中的所有内容。我有两个模型,它们都包含客户实体。这实际上是我开始我最初的问题的地方。实体框架仍然不喜欢在多个模型中拥有客户实体。对不起,如果我错过了重点。

以上是关于Entity Framework 5,多个模型,相同的实体的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework Core 5 - 在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径

转:Entity Framework 5.0 Code First全面学习

将相关数据添加到 Entity Framework 5 (Code-First) 中的交叉引用表

Entity Framework 5.0 Code First全面学习

Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线