EF中的一对一循环引用

时间:2015-06-10 07:38:37

标签: c# database entity-framework circular-dependency

我在代码优先EF6中有一个类(简化)。

public class Transaction
{
    public int Id { get; set; }        
    public int? TransferCounterPartId { get; set; }
    public Transaction TransferCounterPart { get; set; }
    public bool IsTransfer{get{return TransferCounterPart != null;}}
}

我将此描述为循环自引用。我没有添加任何流畅的API,但尝试了不同的方案来解决我的问题。

我的问题是删除这些实体,或者说是构成转移交易的那对实体。

我的删除声明:

Manager.Context.Transactions.Remove(transaction.TransferCounterpart);
Manager.Context.Transactions.Remove(transaction);

例外:

  

无法确定相关操作的有效排序。   由于外键约束,模型可能存在依赖关系   要求或商店生成的值。

如果我将对彼此的引用设置为null,SaveChanges,然后再次删除实体和SaveChanges,它会毫无障碍地进行,但这会影响性能和设计。

问题: 如何删除这两个实体?

解决方案方向我可以成像:

  • 模特不同? (边界条件,我必须很容易找到 我删除一个交易时的对应物)
  • 上下文设置或SaveChanges选项EF?
  • 存储过程,还是执行sql代码?
  • Fluent API?

欢迎任何帮助

psuedo-code modelbuilder.Entity.HasOptional.HasRequired.WillCascasde(true / false)场景不起作用。

0 个答案:

没有答案