Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 实体框架,多个edmx共享连接字符串-可能吗?_Wcf_Entity Framework_Connection String_Wcf Data Services_Edmx - Fatal编程技术网

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

Wcf 实体框架,多个edmx共享连接字符串-可能吗?,wcf,entity-framework,connection-string,wcf-data-services,edmx,Wcf,Entity Framework,Connection String,Wcf Data Services,Edmx,我看到了一些相关的问题,但没有一个是我想要的 我们使用的是一个数据库,需要使用不同的模型和ObjectContext类名分隔edmx文件。这将导致具有多个连接字符串,这些连接仅在元数据部分不同 现在,我终于做到了: Web.config <connectionStrings configSource="connectionStrings.config"></connectionStrings> <connectionStrings> <add na

我看到了一些相关的问题,但没有一个是我想要的

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

现在,我终于做到了:

Web.config

<connectionStrings configSource="connectionStrings.config"></connectionStrings>
<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> 

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


有关如何执行此操作的任何建议?

是的,这是可能的,但您不能使用配置中的EF连接字符串。必须在应用程序中手动生成连接字符串
ObjectContext
支持多个重载构造函数。其中之一是接受
实体连接
。EntityConnection可以依次从
MetadataWorkspace
(从EF元数据文件创建的类)和
DbConnection
构建。您可以将自定义工厂方法添加到派生上下文中,该上下文将从共享数据库连接字符串构建
MetadataWorkspace
DbConnection
,并在
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
,并在应用程序的生命周期内将其存储在内部。它的创建非常耗时

public TwoEntities()
            : base("name=TwoEntities", "TwoEntities")
{
}
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)
{  }