【发布时间】:2013-12-17 17:29:32
【问题描述】:
我有这两个实体:
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);
【问题讨论】:
-
您发布的实体不会导致 FK 循环错误。您的模型中一定有其他实体导致了问题。
-
不可能,我加了这2个,报错了。我用第二个替换了第一个模型构建器代码,运行了迁移并且它工作了。
-
你的实体类并不完整——它们没有开始的键。我刚刚将这两个类(使用适当的键)添加到一个空模型中,并且没有错误。
-
@RichardDeeming 请查看编辑。
-
我刚刚用基类中定义的键再次尝试,它按预期工作。
标签: c# asp.net asp.net-mvc entity-framework