当我调试以下代码时,我在执行System.TypeLoadException
时收到“Delete()
被抓住”的消息。
Using db As New ScholarshipEntities
db.ApplicationHistories.Where(Function(h) h.HistoryTypeId = 0).Delete()
db.SaveChanges()
End Using
我在Visual Studio 2013中使用EF 6.1。我还安装了EntityFramework.Extended库。
查询结果我没有问题。我认为当Where
方法没有结果时可能会发生错误,但事实并非如此。我也没有问题添加新模型(.edmx),这是一个有这个例外的人的问题。
我刚刚升级到EF 6.1并安装了扩展库。这是我第一次使用其中一种扩展方法。我已经卸载并重新安装了nuget包但没有成功。
IntelliTrace显示Delete()
调用中的以下异常(按顺序):
'EntityFramework.Reflection.DynamicProxy' does not contain a definition for 'InternalQuery'
Cannot implicitly convert type 'EntityFramework.Reflection.DynamicProxy' to 'System.Data.Entity.Core.Objects.ObjectQuery<Scholarship.ApplicationHistory>'
Could not load type 'System.Data.Entity.Core.Mapping.EntityContainerMapping'
我在扩展库的github上added an issue。
更新
我重新安装了EF和EF.Extended库,没有运气。我可以在其位置使用RemoveRange
。我能够创建一个新项目,安装包,添加映射到同一数据库的模型,并成功使用Delete
。显然,问题出在我目前的解决方案中。
在我的解决方案中,我有一个ASP.NET项目和一个常规库项目。在ASP项目中,后面的页面代码调用库RemoveHistory
中的方法。该库包含业务逻辑和数据访问的类。这两个类都实现接口。实际Delete
发生在数据访问类中。我的模型也驻留在这个图书馆项目中。
我或许可以创建一个全新的项目,并将所有内容都结束,但这需要相当长的时间。即使我这样做了,我想理解为什么它不起作用,所以我不必重复这个过程。
答案 0 :(得分:0)
如果要删除某些行,请执行以下操作:
Using db As New ScholarshipEntities
db.ApplicationHistories.RemoveRange(db.ApplicationHistories.Where(Function(h) h.HistoryTypeId = 0))
db.SaveChanges()
End Using
如果你想删除单个实体,请执行以下操作:
Using db As New ScholarshipEntities
db.ApplicationHistories.Remove(db.ApplicationHistories.Single(Function(h) h.HistoryTypeId = 0))
db.SaveChanges()
End Using
答案 1 :(得分:0)
我&#34;解决了#34;这个问题不久前。我最终会回去尝试重现问题以确认我的怀疑。
解决方案中安装了多个版本的Entity Framework。这似乎不会影响基本的EF功能,但我确信它确实以某种微妙的,潜在的错误方式进行。
每次打开解决方案时,NuGet都会说它无法完成卸载。通过NuGet卸载和恢复不成功,必须手动删除软件包。一旦完全删除,我再次安装包。这解决了这个问题。
我希望我能提供更具技术性的答案,但基本原因是忘记仔细查看包文件夹和配置。