Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定的架构无效。在多个DLL中使用表时发生异常_C#_Entity Framework_Exception_Entity - Fatal编程技术网

C# 指定的架构无效。在多个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;

我有一个如上所述的问题。让我解释一下细节

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

有人能描述一下在这种情况下是什么导致了这个错误吗

编辑:详细说明如下:

  • 下面的代码位于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; }
        }
    }
    
    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;}
    }
    }
    
  • 下面的代码位于XYZ.dll中:
  • XYZ.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; }
        }
    }
    
    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都包含具有不同名称的公共实体类。