EntityFramework Core Fluent Model Builder 密钥和 属性

EntityFramework Core Fluent Model Builder Key and Property

好的,所以在 entity framework 6 中,我会在一条语句中生成密钥和 属性 数据库:

modelBuilder.Entity<Function>()
                .HasKey(x => x.Id)
                .Property(x => x.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

在 entity framework 核心 (7) 中,这不起作用:

modelBuilder.Entity<Function>()
                .HasKey(x => x.Id)
                .Property(x => x.Id)
                .ValueGeneratedNever();

错误:“'KeyBuilder' 不包含 'Property' 的定义并且没有扩展方法 'Property' 接受类型 'KeyBuilder' 的第一个参数” :

这是否必须是如下两个单独的语句,或者是否有办法像在 EF6 中那样将它合并在一起?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Function>()
                    .HasKey(x => x.Id);

    modelBuilder.Entity<Function>()
                    .Property(x => x.Id)
                    .ValueGeneratedNever();
}

是的,它们在 EF Core 中是分开的。

原因是因为 EF6 方法允许您指定 PK 列,仅此而已,因此返回 EntityTypeConfiguration<TEntityType>(与从 Entity<...> 调用获得的目标相同),这就是为什么您可以继续流畅地配置实体类型。

但是 EF Core 方法 returns 称为 KeyBuilder 的不同类型允许您进一步配置 PK,例如 HasName 用于关系约束名称,或特定的数据库属性,例如ForSqlServerHasNameForSqlServerIsClustered 等等