【发布时间】:2023-02-10 22:08:37
【问题描述】:
我有两个具有(A 和 B)一对一关系的实体。 A 有一个主要的身份密钥 (Id),B 有一个外部的、没有身份的密钥 (Id)。
clas BaseEntity
{
public int Id { get; set; }
...
}
class A : BaseEntity
{
...
public virtual B B { get; set; }
}
class B : BaseEntity
{
...
public virtual A A { get; set; }
}
modelBuilder.Entity<A>(entity =>
{
entity.ToTable("A");
entity.HasOne(d => d.B)
.WithOne(p => p.A)
.HasForeignKey<A>(d => d.Id)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_A_B")
.IsRequired();
...
}
modelBuilder.Entity<B>(entity =>
{
entity.ToTable("B");
entity.Property(e => e.Id).ValueGeneratedNever();
});
当我将新的 B 实体添加到 EF 时,可能会发生 A 也是新的并且它还没有 Id。它必须由数据库生成,因为它是身份密钥。 这是错误消息:
INSERT 语句与 FOREIGN KEY 约束“FK_A_B”冲突。冲突发生在数据库“Database”、表“dbo.A”、“Id”列中。
当我检查生成的 SQL 命令时,我没有看到 A 表中的插入,并且当 A 也是新的时,B 表中的插入包含 0 值 Id。
当两个实体都是新的(添加的)并且 A 实体有身份密钥而 B 没有时,是否可以在一对一关系中插入两个实体?
【问题讨论】:
标签: entity-framework-core one-to-one