实体框架程序集中的类型名称重复(6.1.0)

本文关键字:程序 框架 程序集 集中 类型 实体 | 更新日期: 2023-09-27 17:59:18

我不确定发生了什么,但在执行查询时,我不断收到以下异常。"程序集中的类型名称重复。"我一直无法在网上找到解决方案。我已经解决了这个问题,从解决方案中的所有项目中删除了实体框架,并使用金块重新安装。然后突然间,这个例外又回来了。我已经反复验证了我的表模式,没有发现任何错误。

这是导致异常的查询。

    var BaseQuery = from Users in db.Users
            join UserInstalls in db.UserTenantInstalls on Users.ID equals UserInstalls.UserID
            join Installs in db.TenantInstalls on UserInstalls.TenantInstallID equals Installs.ID
            where
                Users.Username == Username
                && Users.Password == Password
                && Installs.Name == Install
            select Users;
    var Query = BaseQuery.Include("UserTenantInstalls.TenantInstall");
    return Query.FirstOrDefault();

正如我之前提到的,同样的查询以前也在工作。数据没有更改,代码也没有更改。

实体框架程序集中的类型名称重复(6.1.0)

作为一种变通方法,只有当您使用调试器单步执行时才会发生这种情况。如果您将断点放在源代码的下面几行,则不会显示错误。

我还没有卸载,这至少让我可以继续工作。

这是EF 6.1.0的一个新问题,EF团队意识到了这个问题:

https://entityframework.codeplex.com/workitem/2228

最近在我的WCF webservice中也遇到了同样的情况。只需清理解决方案并重新生成即可。这应该可以解决问题。

以上似乎都不适用于我,但在前面指定的链接中,我确实完成了这项工作,这对我有效。这是由"bunomonteiro"提交的

修复"程序集中的类型名称重复"

我也有类似的问题。我检查了我所有的模型/类,并且没有对类型使用重复的名称。我删除了程序集,并从数据库中重新生成了模型和上下文对象,但仍然存在相同的问题。

Visual Studio中生成的跟踪"无法评估子级"。解决方案是添加。ToList();或ToArray();或ToDictionary()等。等

例如。var query=上下文。表格名称。其中(x=>x.name=="CodeRealm")。ToList();

Ping返回-http://entityframework.codeplex.com/workitem/1898

bunomonteiro在7月18日凌晨3:37写道

这似乎在6.1.3中得到了解决。

以下是我得出这个结论的原因:

我在以前的版本中可靠地复制了这个问题(可能是6.1.2)。重建我的解决方案并没有解决它。在之前和之后使用断点的逐步执行确实复制了这个错误,而只有在之后才使用断点异常点不会导致异常,正如其他答案中所述。[总结:我似乎和其他人一样,对旧版本的EF有同样的问题。]

给定完全相同的断点,并且没有重新启动或类似的事情,我只是安装了实体框架的更新。这确实修复了这个问题,在"问题代码"之前和之后,我可以自由地使用断点,不再抛出异常。

由于这个问题在某种程度上是随机的,而且与环境有关,很难说EF的更新是否专门解决了这个问题,但到目前为止还不错。

使用EF 6.1时,我遇到了同样的问题。

在我的例子中,我的模型有一个自参考表。所以我发现它可能是由以下两个原因引起的。

  1. //数据库。SetInitializer(null)只需注释掉DBContext构造函数中的以下行即可
  2. 保持外键及其相应的导航属性一致,或者只保持导航属性为null

必须更正"select Users;"代码段:

var BaseQuery = from Users in db.Users
        join UserInstalls in db.UserTenantInstalls on Users.ID equals UserInstalls.UserID
        join Installs in db.TenantInstalls on UserInstalls.TenantInstallID equals Installs.ID
        where
            Users.Username == Username
            && Users.Password == Password
            && Installs.Name == Install
        select Users;

校正代码:

select new { ID=Users.ID, F1= Users.forExampleField1,
             F2= UserInstalls.forExampleFild1, 
             F3= Installs.forExampleFild1 , 
             F4= Installs.forExampleFild2 };

原因:

类中存在外键字段,并且"Linq"无法删除它们,这是由于以下错误:

程序集中的类型名称重复

(当然这个问题是错误的"实体框架"!)

我对这件事有充分的解释,但不幸的是,我的英语不是很好,我很难解释专业化,因为我知道很多人不理解我的意思。对此我深表歉意。

对我们来说,重新启动服务器就是一切。

我也面临着类似的问题,我通过将结果集转换为List(即)来修复它

var registers=寄存器存储。全部的ToList()。其中(a=>a.AreaLatitude.Equals(0));

将结果转换为ToList解决了进一步迭代的问题。

并解决了这个问题。

昨天花了几个小时才解决了同样的问题。使用EF 6.1.0,执行linq到实体查询时出错,与上面类似。我的解决方案是停止IIS Express,清理解决方案,从解决方案中的所有项目卸载EF,关闭VS2012,删除解决方案中所有包文件夹/文件,然后重新启动VS2012,在需要的地方添加EF 6.1.0,编译,错误消失。