Как зарегистрировать пользовательский код EF Первая миграционная операция для строительных лесов?

.net c# code-first-migrations entity-framework entity-framework-6

Вопрос

У меня есть class SetIdentitySeedOperation: MigrationOperation , который устанавливает значение идентификатора для указанной таблицы. Чтобы SqlServerMigrationSqlGenerator его, я использую пользовательский SqlServerMigrationSqlGenerator , поэтому, если я вручную напишу .AddOperation(new SetIdentitySeedOperation(...)) в моем void Up() моей миграции, мой метод Generate вызывается, и я генерирую соответствующий SQL там.

Каков механизм регистрации этой настраиваемой операции с помощью миграционных лесов, чтобы код, добавляющий эту операцию, генерируется в Add-Migration ?


ОБНОВЛЕНИЕ: Я смотрел исходный код EF-миграции, и кажется, что список операций миграции для получения строительных лесов происходит от вызова EdmModelDiffer.Diff() , а EdmModelDiffer является внутренним, поэтому, похоже, нет возможности подключить ваши собственные соглашения или атрибуты в двигателе лесов.

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

Итак, весь этот механизм полезен только тогда, когда один и тот же код нацелен на разные базы данных?

Популярные ответы

Теперь это возможно с помощью EF 6.1:

Первые аннотации кода позволяют вам устанавливать аннотации для таблиц и столбцов, а затем подключаться к операциям лесов, расширяя SqlServerMigrationSqlGenerator и изменяя строительные леса на основе тех атрибутов, которые вы установили.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему