好的,在实体框架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();
}
答案 0 :(得分:4)
是的,它们在EF Core中是分开的。
原因是因为EF6方法允许您指定PK列而已,因此返回john@email.com
richard.
developer
@email.com
(与从EntityTypeConfiguration<TEntityType>
调用获得的目标相同),这就是为什么您可以继续流畅地配置实体类型。
然而,EF Core方法返回一个名为Entity<...>
的不同类型,它允许您进一步配置PK,如KeyBuilder
用于关系约束名称,或特定数据库属性,如HasName
和ForSqlServerHasName
等。