模型生成ASP.NET EntityFramework循环错误
本文关键字:EntityFramework 循环 错误 NET ASP 模型 | 更新日期: 2024-10-18 15:54:17
我有这两个实体:
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);
我认为EF不会支持这种OOTB。这个答案解释了其他人是如何通过禁用cacsade delete和覆盖delete来做到这一点的。
https://stackoverflow.com/a/13457270/626354
为了能够删除订单,我只需要在删除联系人之前循环并删除它们,这是我自己的级联删除实现!
// 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);