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
,或ForSqlServerHasName
和ForSqlServerIsClustered
等特定数据库属性。