我有这两个实体:
public class Contact : PrimaryKey
{
public ICollection<Order> OrdersPlaced {get;set;}
}
public class Order : PrimaryKey
{
public Contact OrderedBy {get;set;}
public Guid OrderedById {get;set;}
}
PrimaryKey
是我的关键课程:
public abstract class PrimaryKey
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[HiddenInput(DisplayValue=false)]
public Guid Id { get; set; }
}
在上下文中我的模型构建器中执行此操作:
modelBuilder.Entity<Contact>()
.HasMany(c => c.OrdersPlaced)
.WithRequired(o => o.OrderedBy)
.WillCascadeOnDelete();
我希望能够删除联系人,并删除所有关联的订单! 但是,当我删除订单时,我不想删除联系人。
我做了什么引发了一个错误,说外键可能导致删除循环......
我应该这样做:
modelBuilder.Entity<Order>()
.HasRequired(o => o.OrderedBy)
.WithMany(c => c.OrdersPlaced)
.WillCascadeOnDelete(false);
答案 0 :(得分:0)
我不认为EF会支持这个OOTB。这个答案通过禁用cacsade delete和覆盖Delete来解释其他人是如何做到的。
答案 1 :(得分:0)
为了能够删除订单,我只是循环浏览并删除它们,然后删除联系人,我自己的级联删除实现!
// item is a contact
var orderIds = item.OrdersPlaced.Select(x => x.Id);
foreach (var orderId in orderIds)
_repository.Delete(_repository.GetById<Order>(orderId));
_repository.Delete(item);