EntityFramework Core Fluent模型生成器键和属性

好吧,在entity framework6中,我会在一个语句中生成密钥和属性数据库:

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

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

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

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

这是否必须是两个单独的声明,如下所示,或者有一种方法可以像在EF6中一样使用它吗?

 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(x => x.Id); modelBuilder.Entity() .Property(x => x.Id) .ValueGeneratedNever(); } 

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

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

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