我有两个项目:
两者都定义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();
}
在控制台应用程序上我收到此错误:
指定的架构无效。错误: Model1.csdl(3,4):错误0019: EntityContainer名称必须是唯一的。 具有名称的EntityContainer “实体”已经定义。
是否可以使用
News.Data.Entities
Tags.Data.Entities
而不是
News.Data.NewsEntities
Tags.Data.TagsEntities
答案 0 :(得分:4)
<击>
Connectionstrings在应用程序级别配置,容器名称用作唯一标识符。要么将containerNames更改为唯一值,要么重新实现ObjectContext
的默认构造函数,可能会查找Setting
,这可以在程序集级别进行配置。
击>
编辑:
在此示例中创建ObjectContext
,News.Data.Entities
的实例时,上下文的基类通常使用ContainerName
构造。此参数为ObjectContext
提供了进行商店连接所需的所有信息,并完成了所有映射业务。
基本上,ObjectContext
类型与ContainerName
之间存在关联。在实例化第二个上下文Tags.Data.Entities
时,它是一个不同的类型,它会尝试将类型与容器相关联,这就是抛出异常的原因,因为你不能将同一个ContainerName关联两次。
要解决这个问题,如果可以,最好的方法是使用不同的容器名称重新创建EDMX。如果删除不是一个选项,您可以修改设计器中的ContainerName参数,然后在记事本中打开edmx,并查找“EntitiesModelStoreContainer”,并将“实体”部分更改为新的ContainerName。
希望它有所帮助...
答案 1 :(得分:0)
我认为你已经尝试过这个:
using (var db = new News.Data.Entities("name=NewsEntities"))
{
results1 = db.News.ToList();
}
using (var db = new Tag.Data.Entities("name=TagEntities"))
{
results2 = db.Tag.ToList();
}
您的问题是两个项目具有相同的实体容器名称。你需要更改(至少)其中一个。
编辑:对不起,回答你的确切问题......不!
是否可以使用
News.Data.Entities Tags.Data.Entities
而不是
News.Data.NewsEntities Tags.Data.TagsEntities
答案 2 :(得分:0)
问题可能与您的逻辑无关。我有时在构建配置文件之间切换时会遇到这种情况要修复它,我删除所有临时文件并执行干净的构建。