EntityFramework Core Fluent模型构建器密钥和属性

时间:2017-01-27 16:13:29

标签: c# entity-framework entity-framework-core fluent fluent-entity-framework

好的,在实体框架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();
}

1 个答案:

答案 0 :(得分:4)

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

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

然而,EF Core方法返回一个名为Entity<...>的不同类型,它允许您进一步配置PK,如KeyBuilder用于关系约束名称,或特定数据库属性,如HasNameForSqlServerHasName等。