使用注释将信息从模型构建流向EF Core中的迁移

时间:2017-03-31 04:22:16

标签: entity-framework-core

对于EF Core。回购中的相关to this issue

如何从模型构建中“流动信息”到EF Core中的迁移阶段?

在明显完全理解EF Core内部的作者之间讨论了这个问题,但我没有。我该如何实现呢?

1 个答案:

答案 0 :(得分:2)

首先,将注释从模型转移到迁移操作中。通过覆盖特定于提供程序的IMigrationsAnnotationProvider服务来执行此操作。

class MyMigrationsAnnotationProvider : SqlServerMigrationsAnnotationProvider
{
    public override IEnumerable<IAnnotation> For(IProperty property)
        => base.For(property)
            .Concat(property.GetAnnotations().Where(a => a.Name == "MyAnnotation"));
}

其次,使用特定于提供者的IMigrationsSqlGenerator服务中的注释来生成DDL。

class MyMigrationsSqlGenerator : SqlServerMigrationsSqlGenerator
{
    protected override void Generate(
        AddColumnOperation operation,
        IModel model,
        MigrationCommandListBuilder builder)
    {
        var myAnnotation = operation.FindAnnotation("MyAnnotation");
        if (myAnnotation != null)
        {
            // TODO: Add custom SQL using builder
        }
    }
}

最后,配置您的上下文以使用您的服务。

optionsBuilder.UseSqlServer(connectionString)
   .ReplaceService<SqlServerMigrationsAnnotationProvider, MyMigrationsAnnotationProvider>()
   .ReplaceService<SqlServerMigrationsSqlGenerator, MyMigrationsSqlGenerator>();