Как получить доступ к аннотациям модели 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");
    }
}