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

时间:2014-04-21 00:50:03

标签: c# sql-server linq entity-framework visual-studio-2013

我不确定发生了什么,但在进行查询时我一直收到以下异常。 "在程序集中复制类型名称。" 我无法在网上找到解决方案。我通过从解决方案中的所有项目中删除实体框架并使用nugget重新安装来解决了这个问题。然后突然间异常又回来了。我一遍又一遍地验证了我的表架构并且没有发现任何问题。

这是导致异常的查询。

    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();

正如我之前提到的,同样的查询之前是有效的。数据没有改变,代码也没有改变。

10 个答案:

答案 0 :(得分:63)

作为一种解决方法,只有在使用调试器进行单步执行时才会发生这种情况。如果您将断点在源内放置几行,则错误将不会显示。

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

答案 1 :(得分:19)

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

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

答案 2 :(得分:12)

最近我的WCF webservice面对同样的问题。只需清理您的解决方案并重建它。这应该可以解决问题。

答案 3 :(得分:4)

以上所有内容似乎都不适合我,但是在之前指定的链接中,我确实完成了这个,这对我有用。这是由'bunomonteiro'提交的

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

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

在Visual Studio中产生的跟踪“无法评估子项”。解决方案是添加.ToList();或ToArray();或ToDictionary()等,以查询您的查询。等。

例如。 var query = context.TableName.Where(x => x.name ==“CodeRealm”)。ToList();

PingBack - http://entityframework.codeplex.com/workitem/1898

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

答案 4 :(得分:2)

这似乎在6.1.3中得到修复。

以下是我得出这个结论的方法:

我在以前的版本(可能是6.1.2)中可靠地再现了这个问题。重建我的解决方案并没有解决它。在之前和之后使用断点执行重现问题,而在之后只有 之后的没有导致异常,如其他答案中所述。 [摘要:我似乎和其他所有使用旧版EF的人一样有问题。]

鉴于完全相同的断点并且没有重新启动或类似的东西,我只是将更新安装到Entity Framework。这个确实解决了这个问题,我可以在"问题代码之前和之后自由地使用断点。毫无例外地被抛出。

由于这个问题对于这些条件来说是随机和不稳定的,所以很难肯定地说EF的更新专门解决了这个问题,但到目前为止还是那么好。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

就我而言,我的模型有一个自引用表。 所以我发现它可能是由以下两个原因造成的。

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

答案 7 :(得分:0)

必须更正“选择用户; ”代码段:

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”无法删除它们,其中存在以下错误:

  

程序集中的重复类型名称

(当然这个问题是故障“实体框架”!)

我对此事的完整解释, 但不幸的是我的英语不是很好,我很难解释专业化,因为我知道很多人不明白我的意思。 我为此道歉。

答案 8 :(得分:0)

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

var registers = registerRepository.All.ToList()。Where(a => a.AreaLatitude.Equals(0));

转换结果ToList解决了问题,以进一步迭代它。

并解决了这个问题。

答案 9 :(得分:0)

对我们来说,完全重启了服务器。