模型构建ASP.NET EntityFramework循环错误

时间:2013-12-17 17:29:32

标签: c# asp.net asp.net-mvc entity-framework

我有这两个实体:

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);

2 个答案:

答案 0 :(得分:0)

我不认为EF会支持这个OOTB。这个答案通过禁用cacsade delete和覆盖Delete来解释其他人是如何做到的。

https://stackoverflow.com/a/13457270/626354

答案 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);