【发布时间】:2021-09-27 13:39:02
【问题描述】:
我在使用 EF Core 时遇到了一些问题。
我收到此错误:
InvalidOperationException:无法保存更改,因为在要保存的数据中检测到循环依赖
这是我的模型:
public class Transaction
{
public int TransactionId { get; set; }
public int? MutualTransactionId { get; set; }
public virtual Transaction MutualTransaction { get; set; }
public long Debit { get; set; }
public long Credit { get; set; }
}
这是我的OnModelCreating 配置:
public class Repository : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Transaction>(entity =>
{
entity.HasKey(x => x.TransactionId);
entity.HasOne(x => x.MutualTransaction)
.WithOne()
.HasForeignKey<Transaction>(x => x.MutualTransactionId)
.OnDelete(DeleteBehavior.NoAction)
.HasConstraintName("FK_Transactions_Mutuals");
});
}
}
当我想将一系列数据植入数据库时,就会出现问题。
错误本身并不重要。我只是想知道如何使用 EF Core 制作一个一对一的双向自引用表。
每一行引用同一个表中的另一行,被引用的行也使用模型类中的相同属性引用回该行。
【问题讨论】:
-
您不得将英语中的每个单词都大写!
-
您只能在一次调用中插入有向无环图以保存更改。 [添加、保存、更新、保存],或者在插入第二条记录时编写一个触发器来修复第一条记录。
标签: c# entity-framework one-to-one self-reference bidirectional