在多个 dll 中使用 table 时出现指定的架构无效异常
Schema specified is not valid exception occured when using table in multiple dlls
我遇到了 所述的问题。让我解释一下细节。
我有一个 table 用于两个不同的 dll 和不同的 edmx 文件。我有一个使用这两个 dll 的 executable。当我调用其中之一时,它抛出上面指定的异常(指定的架构无效,名称为多种类型...)
谁能告诉我在这种情况下导致此错误的原因?
编辑:详细解释如下:
- 下面的代码在ABC.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:
XYZ.dll -> EntModel.edmx -> 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 的 executable 使用。当我在他们的测试项目上测试这些 dll 时,它们的工作就像一个魅力。然后,当我从 Main.exe 调用它时,当我尝试检索数据时,两个 dll 都会抛出此异常。
Schema specified is not valid. Errors:
Multiple types with the name 'MyTable' exist in the
EdmItemCollection in different namespaces. Convention based mapping
requires unique names without regard to namespace in the
EdmItemCollection.
为了解决这个问题,我重命名了edmx图中的实体名称,错误消失了。
综上所述,禁止不同项目使用相同的实体名称。使用一个且唯一的结构来访问数据库将永久解决主项目的问题。
我遇到了
我有一个 table 用于两个不同的 dll 和不同的 edmx 文件。我有一个使用这两个 dll 的 executable。当我调用其中之一时,它抛出上面指定的异常(指定的架构无效,名称为多种类型...)
谁能告诉我在这种情况下导致此错误的原因?
编辑:详细解释如下:
- 下面的代码在ABC.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:
XYZ.dll -> EntModel.edmx -> 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 的 executable 使用。当我在他们的测试项目上测试这些 dll 时,它们的工作就像一个魅力。然后,当我从 Main.exe 调用它时,当我尝试检索数据时,两个 dll 都会抛出此异常。
Schema specified is not valid. Errors:
Multiple types with the name 'MyTable' exist in the EdmItemCollection in different namespaces. Convention based mapping requires unique names without regard to namespace in the EdmItemCollection.
为了解决这个问题,我重命名了edmx图中的实体名称,错误消失了。
综上所述,禁止不同项目使用相同的实体名称。使用一个且唯一的结构来访问数据库将永久解决主项目的问题。