C# 指定的架构无效。在多个DLL中使用表时发生异常
我有一个如上所述的问题。让我解释一下细节 我有一个表,用于两个不同的dll和不同的edmx文件。我有一个使用这两个DLL的可执行文件。当我调用其中一个时,它抛出上面指定的异常(指定的模式无效,名称为的多个类型…) 有人能描述一下在这种情况下是什么导致了这个错误吗 编辑:详细说明如下:C# 指定的架构无效。在多个DLL中使用表时发生异常,c#,entity-framework,exception,entity,C#,Entity Framework,Exception,Entity,我有一个如上所述的问题。让我解释一下细节 我有一个表,用于两个不同的dll和不同的edmx文件。我有一个使用这两个DLL的可执行文件。当我调用其中一个时,它抛出上面指定的异常(指定的模式无效,名称为的多个类型…) 有人能描述一下在这种情况下是什么导致了这个错误吗 编辑:详细说明如下: 下面的代码位于ABC.dll中: ABC.dll->EntModel.edmx->EntModel.Context.cs namespace MyNamespaceABC { using System;
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; }
}
}
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; }
}
}
名称空间MyNamespaceABC
{
使用制度;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
公共部分类abcenties:DbContext
{
公共债务
:base(“name=abcenticies”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共DbSet MyTables{get;set;}
}
}
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; }
}
}
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; }
}
}
名称空间MyNamespaceXYZ
{
使用制度;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
公共部分类xyzenties:DbContext
{
公共XyzEntities()
:base(“name=xyzenties”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共DbSet MyTables{get;set;}
}
}
这些DLL由名为Main.exe的可执行文件使用。当我在他们的测试项目上测试这些DLL时,它们工作得很好。然后,当我从Main.exe调用它时,当我尝试检索数据时,两个DLL都会引发此异常
指定的架构无效。错误:
中存在多个名为“MyTable”的类型
EdmItemCollection位于不同的名称空间中。基于约定的映射
需要唯一的名称,而不考虑
EdmItemCollection
为了解决这个问题,我在edmx图中重命名了实体名称,错误消失了
综上所述,不同项目不得使用相同的实体名称。使用一个且唯一的结构访问数据库将永久解决主项目的问题。异常消息解释了它自己:名称为。。。你检查过dll的源代码了吗?当然。当我调试并运行dll时,它不会引发异常。当我从使用相同表和不同dll的可执行文件调用它时,会发生异常。这两个DLL在测试项目中都工作得很好。我的意思是,问题是在同一个exe中调用它们。两个dll都包含具有不同名称的公共实体类。但是,这两个类都包含具有相同名称的相同表。这可能会导致问题(我不知道为什么),但我正在寻找一个持久的解决方案。@GertArnold我更新了问题并试图给出更多细节。我希望它能有所帮助。这与您的评论不符。两个dll都包含具有不同名称的公共实体类。