实体框架,多个 edmx 共享连接字符串 - 可能吗?

Posted

技术标签:

【中文标题】实体框架,多个 edmx 共享连接字符串 - 可能吗?【英文标题】:Entity framework, multiple edmx to share connection string - is it possible? 【发布时间】:2011-12-29 01:50:25 【问题描述】:

我看到了许多相关的问题,但没有一个是我正在寻找的。​​p>

我们正在使用一个数据库,需要有不同的 edmx 文件,具有不同的 Model 和 ObjectContext 类名。这导致有多个连接字符串,它们仅在元数据部分不同。

现在我最终这样做了:

Web.config

<connectionStrings configSource="connectionStrings.config"></connectionStrings>

connectionStrings.config

<connectionStrings> 

<add name="Entities" connectionString="metadata=res://*/Entity.Model.csdl|
res://*/Entity.Model.ssdl|res://*/Entity.Model.msl;
provider=CONNECTION STRING DATA GOES HERE"/> 

<add name="TwoEntities" connectionString="metadata=res://*/TwoEntity.TwoModel.csdl|
res://*/TwoEntity.TwoModel.ssdl|res://*/TwoEntity.TwoModel.msl;
provider=EXACTLY THE SAME CONNECTION STRING DATA GOES HERE"/> 

</connectionStrings> 

在我的 ObjectContext 派生类中,我确实有默认生成的构造函数:

public Entities()
            : base("name=Entities", "Entities")


public TwoEntities()
            : base("name=TwoEntities", "TwoEntities")


最好不要在 .config 文件中有两个连接字符串,而是共享来自该文件的相同连接字符串,并以某种方式覆盖每个类中的元数据部分。

关于如何做到这一点的任何建议?

【问题讨论】:

【参考方案1】:

是的,这是可能的,但您不能使用配置中的 EF 连接字符串。您必须在应用程序中手动构建连接字符串。 ObjectContext 支持多个重载的构造函数。其中之一是接受EntityConnection。 EntityConnection 又可以从MetadataWorkspace(从您的EF 元数据文件创建的类)和DbConnection 构造。您可以将自定义工厂方法添加到派生上下文中,该方法将从共享数据库连接字符串构建 MetadataWorkspaceDbConnection 并将它们传递给 EntityConnection

public static Entities GetContext(string connenctionString) 

    MetadataWorkspace workspace = GetWorkspace(); // This should handle workspace retrieval
    DbConnection connection = new SqlConnection(connectionString); // Connection must not be openned
    EntityConnection entConnection = new EntityConnection(workspace, entConnection);
    return new Entities(entConnection);


private Entities(EntityConnextion entConnection) : base(entConnection)
   

你将使用这个工厂方法而不是构造函数。确保GetWorkspace 每个元数据集只创建一次MetadataWorkspace,并在应用程序的生命周期内将其存储在内部。它的创建非常耗时。

【讨论】:

以上是关于实体框架,多个 edmx 共享连接字符串 - 可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架在 Visual Studio 中失去与连接字符串的绑定

实体框架超时

在实体框架 EDMX 中创建视图之间的关联时出错

同一个 .net 解决方案中的多个 edmx

有没有人将实体框架与代码优先方法与 Edmx 文件混合使用?

如何自定义与 EDMX(模型优先)实体框架 4.1 一起使用的表名?