Как получить доступ к аннотациям модели EF в классе миграции, метод Up?
Как получить доступ к аннотациям модели EF в классе миграции, метод Up?
Я имею в виду эти аннотации:
modelBuilder.Entity<Role>().HasAnnotation("constraint1", constraint);
В этом методе:
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// how to access annotations? means get value of Role's "constraint1" annotation
}
}
Процесс сборки миграции (на этапе автоматизации) может использовать аннотации (а также другие определения), но тогда, если вы хотите вручную добавить / изменить код миграции, не совсем понятно, как получить доступ к метаданным.
1 ответ
Проблема заключается в том, что во время миграции не существует единой модели, или, точнее, миграция представляет собой преобразование между двумя моделями, и ни одна из них не может быть текущей. В процессе построения миграции используются снимки моделей и различия для создания команд миграции.
В конце концов вы можете попытаться получить информацию из Migration.TargetModel
имущество. Он предоставляет моментальный снимок модели во время миграции и создается кодом в связанной миграции. designer.cs
файл.
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// how to access annotations? means get value of Role's "constraint1" annotation
var annotations = TargetModel.FindEntityType("YourModelNamespace.Role"))
.GetAnnotations();
// or
var constraint1 = TargetModel.FindEntityType("YourModelNamespace.Role"))
.FindAnnotation("constraint1");
}
}