在多个 dll 中使用 table 时出现指定的架构无效异常

Schema specified is not valid exception occured when using table in multiple dlls

我遇到了 所述的问题。让我解释一下细节。

我有一个 table 用于两个不同的 dll 和不同的 edmx 文件。我有一个使用这两个 dll 的 executable。当我调用其中之一时,它抛出上面指定的异常(指定的架构无效,名称为多种类型...)

谁能告诉我在这种情况下导致此错误的原因?

编辑:详细解释如下:

  1. 下面的代码在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; }
    }
}
  1. 下面的代码在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图中的实体名称,错误消失了。

综上所述,禁止不同项目使用相同的实体名称。使用一个且唯一的结构来访问数据库将永久解决主项目的问题。