EntityContainer名称在不同的程序集中必须是唯一的?

Bru*_*oLM 5 c# entity-framework entity-framework-4

我有两个项目:

  • News.Data
  • Tags.Data

两者都定义Entities.当我尝试执行时

using (var db = new News.Data.Entities("name=Entities"))
{
    results1 = db.News.ToList();
}

using (var db = new Tag.Data.Entities("name=Entities"))
{
    results2 = db.Tag.ToList();
}
Run Code Online (Sandbox Code Playgroud)

在控制台应用程序上我收到此错误:

指定的架构无效.错误:Model1.csdl(3,4):错误0019:EntityContainer名称必须是唯一的.已定义名为"实体"的EntityContainer.

是否可以使用

News.Data.Entities
Tags.Data.Entities
Run Code Online (Sandbox Code Playgroud)

代替

News.Data.NewsEntities
Tags.Data.TagsEntities
Run Code Online (Sandbox Code Playgroud)

Yan*_*ton 4

连接字符串在应用程序级别配置,容器名称用作唯一标识符。要么将 containerNames 更改为唯一值,要么重新实现 的默认构造函数ObjectContext以查找Setting可以在程序集级别配置的 a 。

ObjectContext编辑:在本例中,创建 的实例时News.Data.Entities,上下文的基类通常是使用ContainerName. 该参数提供了ObjectContext建立其存储连接并执行所有映射业务所需的所有信息。

ObjectContext基本上,类型和之间建立了关联ContainerName。当实例化第二个 context Tags.Data.Entities(不同类型)时,它将尝试将该类型与容器关联起来,这就是引发异常的原因,因为您不能将相同的 ContainerName 关联两次。

要解决此问题,如果可以的话,最好的办法是使用不同的容器名称重新创建 EDMX。如果无法删除,您可以在设计器中修改 ContainerName 参数,然后在记事本中打开 edmx,查找“EntitiesModelStoreContainer”,然后将“Entities”部分更改为新的 ContainerName。

希望能帮助到你...