对于EF Core。回购中的相关to this issue。
如何从模型构建中“流动信息”到EF Core中的迁移阶段?
在明显完全理解EF Core内部的作者之间讨论了这个问题,但我没有。我该如何实现呢?
答案 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>();