EntityFramework Core Fluent Model Builder 密钥和 属性
EntityFramework Core Fluent Model Builder Key and Property
好的,所以在 entity framework 6 中,我会在一条语句中生成密钥和 属性 数据库:
modelBuilder.Entity<Function>()
.HasKey(x => x.Id)
.Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
在 entity framework 核心 (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();
}
是的,它们在 EF Core 中是分开的。
原因是因为 EF6 方法允许您指定 PK 列,仅此而已,因此返回 EntityTypeConfiguration<TEntityType>
(与从 Entity<...>
调用获得的目标相同),这就是为什么您可以继续流畅地配置实体类型。
但是 EF Core 方法 returns 称为 KeyBuilder
的不同类型允许您进一步配置 PK,例如 HasName
用于关系约束名称,或特定的数据库属性,例如ForSqlServerHasName
和 ForSqlServerIsClustered
等等
好的,所以在 entity framework 6 中,我会在一条语句中生成密钥和 属性 数据库:
modelBuilder.Entity<Function>()
.HasKey(x => x.Id)
.Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
在 entity framework 核心 (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();
}
是的,它们在 EF Core 中是分开的。
原因是因为 EF6 方法允许您指定 PK 列,仅此而已,因此返回 EntityTypeConfiguration<TEntityType>
(与从 Entity<...>
调用获得的目标相同),这就是为什么您可以继续流畅地配置实体类型。
但是 EF Core 方法 returns 称为 KeyBuilder
的不同类型允许您进一步配置 PK,例如 HasName
用于关系约束名称,或特定的数据库属性,例如ForSqlServerHasName
和 ForSqlServerIsClustered
等等