我遇到了here所述的问题。让我解释一下细节。
我有一个表格,用于两个不同的dll,带有不同的edmx文件。我有一个使用这两个dll的可执行文件。当我调用其中一个时,它会抛出上面指定的异常(指定的模式无效,多个类型具有名称......)
有人能形容我在这种情况下导致此错误的原因是什么?
修改:详细说明如下:
ABC.dll - > EntModel.edmx - > EntModel.Context.cs
namespace MyNamespaceABC
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class AbcEntities : DbContext
{
public AbcEntities()
: base("name=AbcEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<MyTable> MyTables { get; set; }
}
}
XYZ.dll - &gt; EntModel.edmx - &gt; EntModel.Context.cs
namespace MyNamespaceXYZ
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class XyzEntities : DbContext
{
public XyzEntities()
: base("name=XyzEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<MyTable> MyTables { get; set; }
}
}
这些dll由名为 Main.exe 的可执行文件使用。当我在他们的测试项目中测试这些dll时,它们就像一个魅力。然后,当我从Main.exe调用它时,当我尝试检索数据时,两个dll都会抛出此异常。
指定的架构无效。错误:
多种类型的名称&#39; MyTable&#39;存在于 EdmItemCollection在不同的命名空间中。基于公约的映射 需要唯一的名称而不考虑名称空间 EdmItemCollection。
答案 0 :(得分:0)
要解决此问题,我在edmx图中重命名了实体名称,错误消失了。
总之,禁止对不同的项目使用相同的实体名称。使用唯一的结构访问数据库将永久解决主项目的问题。