gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:11:35 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com