我不确定发生了什么,但在进行查询时我一直收到以下异常。 "在程序集中复制类型名称。" 我无法在网上找到解决方案。我通过从解决方案中的所有项目中删除实体框架并使用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();
正如我之前提到的,同样的查询之前是有效的。数据没有改变,代码也没有改变。
答案 0 :(得分:63)
作为一种解决方法,只有在使用调试器进行单步执行时才会发生这种情况。如果您将断点在源内放置几行,则错误将不会显示。
我还没有卸载,这至少让我继续工作。
答案 1 :(得分:19)
这是EF 6.1.0的新问题,EF团队意识到了这个问题:
答案 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,我遇到了同样的问题。
就我而言,我的模型有一个自引用表。 所以我发现它可能是由以下两个原因造成的。
答案 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)
对我们来说,完全重启了服务器。