#entity-framework #ef-code-first #asp.net-web-api2
#entity-framework #ef-code-first #asp.net-web-api2
Вопрос:
Исходная проблема, которую я пытался решить, была связана с этим сообщением об ошибке. Это происходит в проекте Web API 2, запущенном в Azure.
Ошибка 1
Введение ограничения ВНЕШНЕГО КЛЮЧА ‘FK_dbo.Merchant_MerchantId’ для ключей таблицы ‘ может вызвать циклы или несколько каскадных путей. Укажите ПРИ УДАЛЕНИИ НИКАКИХ ДЕЙСТВИЙ или ПРИ ОБНОВЛЕНИИ НИКАКИХ ДЕЙСТВИЙ или измените другие ограничения ВНЕШНЕГО КЛЮЧА.
Сообщение об ошибке FOREGIN KEY появилось только после того, как я попытался загрузить сборку выпуска моего API в мою службу приложений Azure. Недавно я обновился до версии 15.9.11 Visual Studio 2017, но я понятия не имею, является ли это причиной проблемы с ВНЕШНИМ КЛЮЧОМ, из-за которой начался этот беспорядок. Этот API и база данных работают уже много лет без каких-либо проблем.
Чтобы попытаться устранить проблему, я добавил следующую строку в свой метод OnModelCreating (DbModelBuilder ModelBuilder).
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Добавление типа строки устранило проблему, и ошибка 1 исчезла, но теперь API не находит записи, которые на самом деле находятся в базе данных. Я не уверен, почему это так.
С тех пор я закомментировал строку и загрузил новую сборку моей службы приложений. Теперь я получаю это сообщение об ошибке.
Ошибка 2
Ошибка: модель, поддерживающая контекст ‘NameDbContext’, изменилась с момента создания базы данных.
На данном этапе я создаю больше проблем вместо того, чтобы исправлять мою первоначальную проблему.
Любая помощь в восстановлении после этого беспорядка очень ценится! Спасибо!
ОБНОВЛЕНИЕ 1
Я работал с инженером Microsoft над ошибкой «Модель, поддерживающая контекст ‘NameDbContext’, изменилась с момента создания базы данных». Я добавил следующее в Application_Start () в файле Global.asax.cs. Добавление этого не привело к удалению или изменению каких-либо моих данных в SQL. Сообщение об ошибке 2 исчезло. API по-прежнему не возвращает записи, которые находятся в базе данных, поэтому у меня все еще есть проблема, которую нужно исправить.
Database.SetInitializer<FaceOffersDbContext>(null);
ОБНОВЛЕНИЕ 2
Я запустил свой API локально без проблем. Это означает, что проблема возникает только в Azure. Я работаю с Microsoft, чтобы сузить проблему и придумать исправление.
Ответ №1:
Похоже, что ваша схема базы данных изменена и не соответствует вашей entity Framework, вы можете попытаться принудительно обновить свою базу данных с помощью консоли диспетчера пакетов.
Комментарии:
1. Спасибо за помощь! Не могли бы вы быть немного более конкретным? Есть ли способ отменить то, что ModelBuilder. Соглашения. Удалить<OneToManyCascadeDeleteConvention>(); кажется, сделано? Я хотел бы попытаться вернуться к жизни, прежде чем добавлять эту строку кода. 🙂 Затем я могу вернуться к работе над исходной ошибкой.
2. Возможно, я мог бы добавить OneToManyCascadeDeleteConvention обратно, например. ModelBuilder. Соглашения. Добавить<OneToManyCascadeDeleteConvention>();