Игнорирование миграций только для одной схемы с Entity Framework 6 - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сделать что-то с помощью EF, что, на мой взгляд, должно быть простым, но я не могу понять, как именно это сделать.

Допустим, у нас есть основное веб-приложение ASP.NET, данные которого хранятся в схеме dbo в нашей базе данных. Затем мы хотим добавить дополнительный модуль, данные которого хранятся в схеме opt, которую мы можем включить в зависимости от некоторых бизнес-потребностей.

Дополнительному модулю потребуются данные из основной схемы - это расширение функциональности, найденной там. Чтобы сделать это безболезненным, было бы неплохо иметь беспроблемный опыт использования LINQ.

Рабочий прототип, который у меня есть в настоящее время, является отношением наследования OptionalDataContext : CoreDataContext. CoreDataContext используется для доступа и изменения существующих данных.

Допустим, я хочу просто добавить одну таблицу в схему opt: DbSet<OptionalClass> OptionalClasses. Он получает свойство OptionalDataContext. Необязательный класс выглядит как

[Table(Name="OptionalClasses", Schema="opt")]
OptionalClass {
public int Id {get; set;}
public string OptionalData {get; set;}
public virtual CoreAppClass CoreData {Get; set}
}

, в котором виртуальное свойство указывает на таблицу dbo.CoreAppClasses.

Теперь у нас после хакерского запуска настройка позволяет моему единому контексту свободно выполнять соединения и запросы LINQ по всей схеме. Если CoreAppClass, в свою очередь, имеет виртуальные свойства, я могу получить к ним доступ с помощью цепочек операторов Include. Это здорово.

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

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

Есть ли простое решение сделать так, чтобы при добавлении миграций в основном использовалась команда -IgnoreChanges для основной части только этого нового OptionalDataContext?

Использование modelbuilder.Ignore () для каждого отдельного свойства ядра нежизнеспособно - это просто дополнительные проблемы обслуживания. Я хочу установить некоторую конфигурацию, чтобы эти миграции просто обновляли моментальный снимок модели EF для любых изменений в таблицах dbo, но создавали миграции для всех изменений opt.

...