我有两个项目:

  • News.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();
    }
    

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



    是否可以使用
    News.Data.Entities
    Tags.Data.Entities
    

    代替
    News.Data.NewsEntities
    Tags.Data.TagsEntities
    

    最佳答案

    连接字符串是在应用程序级别配置的,并且容器名用作唯一标识符。可以将containerNames更改为唯一值,或者重新实现ObjectContext的默认构造函数以查找Setting,可以在程序集级别对其进行配置。

    编辑:
    在此示例中,创建ObjectContextNews.Data.Entities的实例时,上下文的基类通常使用ContainerName构造。此参数为ObjectContext提供了所有必要的信息以建立其商店连接,并完成其所有映射业务。

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

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

    希望能帮助到你...

    关于c# - EntityContainer名称在不同程序集中必须是唯一的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4898794/

    10-12 12:25