无法加载类型'System.Data.Entity.Core.Mapping.EntityContainerMapping'

时间:2014-05-02 19:43:34

标签: vb.net entity-framework visual-studio-2013 dbcontext entity-framework-extended

当我调试以下代码时,我在执行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发生在数据访问类中。我的模型也驻留在这个图书馆项目中。

我或许可以创建一个全新的项目,并将所有内容都结束,但这需要相当长的时间。即使我这样做了,我想理解为什么它不起作用,所以我不必重复这个过程。

2 个答案:

答案 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卸载和恢复不成功,必须手动删除软件包。一旦完全删除,我再次安装包。这解决了这个问题。

我希望我能提供更具技术性的答案,但基本原因是忘记仔细查看包文件夹和配置。