在多个dll

时间:2017-10-26 11:58:28

标签: c# entity-framework exception entity

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

我有一个表格,用于两个不同的dll,带有不同的edmx文件。我有一个使用这两个dll的可执行文件。当我调用其中一个时,它会抛出上面指定的异常(指定的模式无效,多个类型具有名称......)

有人能形容我在这种情况下导致此错误的原因是什么?

修改:详细说明如下:

  1. 以下代码位于 ABC.dll
  2. 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
    2. 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。

1 个答案:

答案 0 :(得分:0)

要解决此问题,我在edmx图中重命名了实体名称,错误消失了。

总之,禁止对不同的项目使用相同的实体名称。使用唯一的结构访问数据库将永久解决主项目的问题。