c# - 为什么 EF Core 不设置自定义注解?

标签 c# entity-framework-core

在 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/

相关文章:

xunit - 单独的内存数据库 EF7

c# - DispatcherTimer 应用间隔并立即执行

c# - Status Entities in .NET Core Entity Framework - 建议的实现

c# - EF Core 是否可以将 OnModelCreating/ConfigureConventions 中的代码作为迁移代码生成的一部分?

c# - EFCore Linq ThenInclude 两个外键到同一个表

c# - EF Core 与 Postgres 正在生成负主键

c# - 需要数组的可变参数函数的设计决策是什么?

c# - NLog 缺少具有异步滚动更新文件配置的日志条目

c# - 自定义 Api 授权忽略 AllowAnonymous

c# - 将多个导航属性配置到同一个表时出错