【问题标题】:Creating multiple Entity Framework EDMX files for factory pattern use为工厂模式使用创建多个实体框架 EDMX 文件
【发布时间】:2012-12-11 10:49:26
【问题描述】:

人们正在使用 Entity 框架做一些聪明的事情,但我认为我正在做一些非常简单的事情,而且似乎无法实现。

我有两个独立的数据库。数据库 A 和数据库 B。

我需要分别为这些数据库创建上下文,所以我想要一个工厂模式来为我实例化任一上下文。我正在尝试使用数据库优先方法。

我通过 Nuget 包管理器引用了实体框架,并使用 Visual Studio 创建了一个新项目。唯一可以选择的带有 EDMX 扩展的项目是“ADO.NET 实体数据模型”,所以我选择了数据库 A。

EDMX 文件已生成,我可以看到我的实体。当以编程方式访问它们时,实体已被转储到默认命名空间中。这意味着我可以通过转到 my.namespace.datasource.TableA 来获得实体的智能感知。

如果我现在在同一个区域创建另一个 EDMX 文件,相同的实体将被转储到同一个地方,我会遇到冲突。

我得到的错误示例是:

“‘my.namespace.datasource.Entities’类型已经包含‘TableA’的定义”

这是为什么?为什么不为实体将驻留在其中的 EDMX 文件创建默认命名空间?如何让多个 EDMX 文件协调工作并在需要时提供单独的上下文?

任何帮助表示赞赏!

干杯,

卡尔。

【问题讨论】:

    标签: c# entity-framework entity-framework-5


    【解决方案1】:
    • 选项 1. 在解决方案资源管理器中选择模型项目项目,转到项目 属性,将属性“自定义工具命名空间”设置为首选 价值。您生成的代码将放在您设置的命名空间中。
    • 选项 2. 创建两个单独的文件夹并将一个模型放入 第一个文件夹,一个 - 进入第二个文件夹。
    • 选项 3。将模型放入单独的项目中。

    注意。 如果您使用 VS2010 和任何 T4 生成器(例如 DbContext 生成器),您应该:

    • 通过清除 EDMX 项目项的“自定义工具”属性来关闭默认代码生成;
    • 为 T4 项目项(例如 Model1.ttModel1.Context.tt)设置“自定义工具命名空间”。

    【讨论】:

    • 感谢您的回复丹尼斯!我确实尝试了选项 1 和 2,它似乎并没有影响生成的 POC 的命名空间。选项 3 似乎是迄今为止最好的选择!
    • @Karl:你用的是什么生成器?您可以发布自定义工具名称吗?
    • 我不是 100% 说实话。我通过 NuGet 包管理器安装了 EF5,并通过添加新 -> 数据 -> ADO.NET 实体数据模型创建了 edmx 文件。
    • 如果您使用的是 VS2012,则默认代码生成是 DbContext 和 POCO 实体。解析 POCO 实体时,EF 会忽略名称空间,然后如果发现不明确的匹配项(您遇到的例外情况),则会忽略 - 即使是单独的文件夹/名称空间/程序集也无济于事。这些数据库是否具有相同的模式或者它们不同或只是有些不同?您想共享两个上下文的实体类型定义吗?我认为如果不先回答上述问题,将很难解决这个问题。
    • @Karl:正如 Pawel 所说,如果你能告诉我们你正在使用的 VS 版本,那就更好了。 VS2010SP1 + EF5(通过 NuGet 安装)+ EF 5.x(通过扩展管理器安装的项目项模板) DbContext 生成器:选项 1 和 2 工作正常。我已经添加了一些注释来回答。
    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多