wcf - Entity Framework ,多个 edmx 共享连接字符串 - 可能吗?

标签 wcf entity-framework connection-string wcf-data-services edmx

我看到了一些相关的问题,但没有一个是我正在寻找的。

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

现在我最终这样做了:

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 文件中有两个连接字符串,而是共享来自该文件的相同连接字符串,并以某种方式覆盖每个类中的元数据部分。

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

最佳答案

是的,这是可能的,但您不能使用配置中的 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每个元数据集仅一次,并在应用程序的整个生命周期内将其存储在内部。它的创建非常耗时。

关于wcf - Entity Framework ,多个 edmx 共享连接字符串 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8129219/

相关文章:

c# - 通过桌面和 Web 访问具有 Windows 身份验证的 WCF 服务

c# - 如何从程序集/WCF 服务内部访问程序集版本和名称?

sql - Excel VBA 解析 SQL 连接字符串

deployment - 初始化字符串的格式不符合从索引 0 开始的规范

c# - 如何在返回的类上实现接口(interface)并保留其数据?

c# - EntityFramework 避免打开/关闭连接?

c# - 比较 int 时 Linq to Entities 错误?到一个值

sql-server-2008 - 是否可以通过 "turn off"查询来更新 Entity Framework 中的标识列

c# - SQL Server 的连接字符串(本地数据库)

xml - WCF 数组序列化