好的,在实体框架 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();
}
是的,它们在 EF Core 中是分开的。
原因是因为 EF6 方法允许您指定 PK 列,仅此而已,因此返回EntityTypeConfiguration<TEntityType>
(与从获得的目标相同Entity<...>
调用),这就是为什么您可以继续流畅地配置实体类型。
然而 EF Core 方法返回一个不同的类型,称为KeyBuilder
它允许您进一步配置 PK,例如HasName
对于关系约束名称,或特定的数据库属性,例如ForSqlServerHasName
and ForSqlServerIsClustered
etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)