Не удалось загрузить тип '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