Я в недоумении:
Я определил свои классы для подхода, основанного на коде структуры сущностей (4.1.3). Все было хорошо (я создавал таблицы и т. Д.), Пока не начал Seed.
Теперь, когда я делаю
Add-Migration "remigrate" ; Update-Database;
Я получаю сообщение об ошибке в консоли пакета «Ошибка проверки для одной или нескольких сущностей. Для получения дополнительной информации см. Свойство EntityValidationErrors».
У меня есть точка останова в моем методе Seed (), но поскольку я запускаю ее на консоли, когда проект не запущен, я не знаю, как добраться до деталей (PS - я видел, что проверка потока не удалась для одной или нескольких сущностей при сохранении изменений в базе данных SQL Server с помощью Entity Framework, которая показывает, как я могу видеть свойство.)
Я знаю, что у моего метода Seed () есть проблема, потому что, если я помещаю возврат сразу после вызова метода, ошибка исчезает. Итак, как мне установить точку останова, чтобы я мог видеть, в чем ошибка проверки? Типа проиграл. Или есть другой способ отследить это в консоли nuget ??
Ответы:
Меня это тоже недавно раздражало. Я исправил это, поместив функцию-оболочку в класс Configuration в методе Seed, и вместо этого заменил вызовы на
SaveChanges
вызовы моей функции. Эта функция просто перечислит ошибки вEntityValidationErrors
коллекции и повторно вызовет исключение, где в сообщении об исключении перечислены отдельные проблемы. Это заставляет вывод отображаться в консоли диспетчера пакетов NuGet.Код следующий:
Просто замените вызовы
context.SaveChanges()
сSaveChanges(context)
в методе семян.источник
public override int SaveChanges()
внутри контекста.Расширьте свой класс DBContext уже с помощью частичного определения класса!
Если вы посмотрите на определение класса для вашего DbContext, оно будет примерно таким:
Итак, в другом файле вы можете создать такое же определение и переопределить нужные вам части.
Вся идея с частичными классами --did вы заметили DbContext частичное class-- является то , что вы можете расширить класс , который был создан (или организовывать занятия на несколько файлов) , а в нашем случае мы хотим переопределить в SaveChanges метод из частичного класса, который добавляет к DbContext .
Таким образом, мы можем получать информацию об ошибках отладки из всех существующих вызовов DbContext / SaveChanges повсюду, и нам вообще не нужно менять код Seed или код разработки.
Это то, что я бы сделал ( ПРИМЕЧАНИЕ, разница в том, что я просто переопределяю метод SaveChanges в нашем собственном созданном частичном классе DbContext , а не в ПОЛУЧЕННОМ ). Также убедитесь, что частичный класс использует правильное пространство имен, иначе вы будете биться головой о стену.
источник
Я преобразовал ответ Ричардса в метод расширения:
Звоните так:
источник
Я преобразовал версию Craigvl в C #. Мне пришлось добавить context.SaveChanges (); чтобы он работал у меня, как показано ниже.
источник
Ричард благодарит меня за то, что направил меня по правильному пути (была такая же проблема). Ниже представлена альтернатива без оболочки, которая сработала для меня в методе начального значения конфигурации миграции:
Затем удалось увидеть исключение в консоли диспетчера пакетов. Надеюсь, это кому-то поможет.
источник
источник