在 DbContext 中,我声明模型如下:
modelBuilder.Entity<FileStore>().Property(x => x.FileStoreId)
.ValueGeneratedNever()
.ForSqlServerHasDefaultValueSql("NewSequentialId()")
.HasAnnotation("RowGuidColumn", true);
但是在添加迁移之后,HasAnnotation("RowGuidColumn", true) 没有向 Column 添加任何 Annotation:
columns: table => new
{
FileStoreId = table.Column<Guid>(nullable: false, defaultValueSql: "NewSequentialId()"),
CreationTime = table.Column<DateTimeOffset>(nullable: false),
}
而且我最多直接添加Annotation:
FileStoreId = table.Column<Guid>(nullable: false, defaultValueSql: "NewSequentialId()").**Annotation("RowGuidColumn", true)**
如何在 Add-Migration 中添加自动生成的注解?
最佳答案
提供者指定将哪些模型注释复制/转换为迁移操作。要执行您要求的操作,您需要重写特定于提供程序的 IMigrationsAnnotationProvider
服务。
optionsBuilder.UseSqlServer(connectionString)
.ReplaceService<SqlServerMigrationsAnnotationProvider, MyMigrationsAnnotationProvider>();
这是实现。
class MyMigrationsAnnotationProvider : SqlServerMigrationsAnnotationProvider
{
public override IEnumerable<IAnnotation> For(IProperty property)
=> base.For(property)
.Concat(property.GetAnnotations().Where(a => a.Name == "RowGuidColumn"));
}
从那里您需要做一些事情,通过覆盖特定于提供者的 IMigrationsSqlGenerator
服务将其转换为 SQL。
关于c# - 为什么 EF Core 不设置自定义注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42459957/