Не удалось загрузить тип 'System.Data.Entity.Core.Mapping.EntityContainerMapping'

Когда я отлаживаю следующий код, я получаю сообщениеSystem.TypeLoadException был пойман ", когда я выполняю Delete(),

Using db As New ScholarshipEntities

    db.ApplicationHistories.Where(Function(h) h.HistoryTypeId = 0).Delete()
    db.SaveChanges()

End Using

Я использую EF 6.1 в Visual Studio 2013. У меня также установлена ​​библиотека 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.

Обновление Я переустановил EF и библиотеку EF.Extended без удачи. Я могу использовать RemoveRange на своем месте. Я могу создать новый проект, установить пакеты, добавить модель, сопоставленную с той же базой данных, и успешно использовать Delete, Очевидно, проблема в моем текущем решении.

В моем решении у меня есть проект ASP.NET и проект обычной библиотеки. В проекте ASP код страницы вызывает метод в библиотеке RemoveHistory, Библиотека содержит классы для бизнес-логики и доступа к данным. Оба класса реализуют интерфейсы. Настоящий Delete происходит в классе доступа к данным. Моя модель также находится в этом проекте библиотеки.

Возможно, мне удастся создать совершенно новый проект и довести все до конца, но это займет довольно много времени. Даже если бы я это сделал, я хочу понять, почему это не работает в первую очередь, чтобы мне не пришлось повторять этот процесс.

2 ответа

Решение

Я "решил" проблему некоторое время назад. В конце концов я вернусь, чтобы попытаться воспроизвести проблему, чтобы подтвердить мои подозрения.

В решении было установлено несколько версий Entity Framework. Похоже, что это не повлияло на базовую функциональность EF, хотя я уверен, что это произошло каким-то тонким, потенциально ошибочным способом.

Каждый раз, когда решение было открыто, NuGet заявлял, что не может завершить удаление. Удаление и восстановление через NuGet не увенчались успехом, и пакеты пришлось удалить вручную. После полного удаления я снова установил пакеты. Это решило проблему.

Хотел бы я дать более технический ответ, хотя основной причиной было забыть присмотреться к папке с пакетами и конфигурации.

Если вы хотите удалить определенные строки, сделайте это так:

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
Другие вопросы по тегам