為什麼EF Core沒有設置自定義註釋?

c# entity-framework-core

在DbContext中,我聲明模型如下:

modelBuilder.Entity<FileStore>().Property(x => x.FileStoreId)
            .ValueGeneratedNever()
            .ForSqlServerHasDefaultValueSql("NewSequentialId()")
            .HasAnnotation("RowGuidColumn", true);

但添加遷移後,HasAnnotation(“RowGuidColumn”,true)不會向列添加任何註釋:

 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中生成auto的註釋?

一般承認的答案

提供程序指定將哪些模型註釋複製/轉換為遷移操作。要執行您要求的操作,您需要覆蓋特定於提供程序的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。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow