4

好的,所以在实体框架 6 中,我将在一个语句中生成密钥和属性数据库:

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

在实体框架核心 (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();
}
4

1 回答 1

5

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

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

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

于 2017-01-27T16:46:40.800 回答