我正在使用EF和Code First。
我有一个像这样的Transaction类:
[Table("Transacties")]
public class Transactie
{
[Key]
[Column(Order = 1)]
[StringLength(128)]
public string KIMTransactieCode { get; set; }
[Column(Order = 2)]
[StringLength(128)]
public string BovenliggendeKIMTransactieCode { get; set; }
[ForeignKey("BovenliggendeKIMTransactieCode")]
public Transactie BovenLiggendeTransactie { get; set; }
public DateTime? DatumLaatstBekeken { get; set; }
public bool? IsZichtbaar { get; set; }
public DateTime? IsZichtbaarGewijzigdOp { get; set; }
public OpnameInfo OpnameInfo { get; set; }
}
关系如下: 事务可以具有子事务,当存在子事务时,父事务需要引用(' BovenliggendeKIMTransactieCode')。这是在一个类/表中完成定义的。
它主要使用数据注释。
我希望在此类上进行级联删除:删除(父)事务时,还必须删除所有相关的子事务。
我尝试按如下方式调用级联删除:
var transactions = mailboxDataContext.Transacties
.Where(tr => tr.BovenliggendeKIMTransactieCode == null &&
tr.IsZichtbaar.HasValue &&
!tr.IsZichtbaar.Value &&
tr.IsZichtbaarGewijzigdOp.HasValue &&
tr.IsZichtbaarGewijzigdOp.Value < selectionDateTime)
.ToList(); // Materialize
if (transactions.Count > 0)
{
foreach (var transaction in transactions)
{
mailboxDataContext.SetDeleted(transaction);
}
mailboxDataContext.SaveChanges();
}
然后我得到:
&#34; DELETE语句与SAME TABLE REFERENCE冲突 约束 \&#34; FK_dbo.Transacties_dbo.Transacties_BovenliggendeKIMTransactieCode \&#34 ;. 冲突发生在数据库\&#34; PROGISKIM_Mailbox \&#34;,表中 \&#34; dbo.Transacties \&#34;,column&#39; BovenliggendeKIMTransactieCode&#39;。\ r \ n 声明已被终止。&#34;
如何解决这个问题?
更新 当我尝试删除SSMS中的主行时,我也得到了这个例外......