我有一个在实体框架配置组合键在3个表之间的代码第一种方法有点问题。我有一个基类,它有我的所有类继承的Id。第一个表具有第二个表项的集合,而第三个表具有第三个表的集合。从两个表中删除元素时,我需要复合键级联删除。我也在使用聚合根模式。实体框架多个复合键,级联删除
public abstract class BaseClass
{
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
}
public class Table1 : BaseClass
{
public virtual ICollection<Table2> Table2Collection { get; set; }
public string Name { get; set; }
}
public class Table2 : BaseClass
{
public Table1 Table1 {get; set;}
[Key, ForeignKey("Table1"), Column(Order=1)]
public long Table1ID { get; set; }
public virtual ICollection<Table3> Table3Collection { get; set; }
public string Name { get; set; }
}
public class Table3 : BaseClass
{
[Key, ForeignKey("Table2Id,Table1Id"), Column(Order = 1)]
public Table2 Table2 { get; set; }
public long Table2Id{ get; set; }
public long Table1Id{ get; set; }
public string Name { get; set; }
}
上面的代码工作正常,当我删除任何类型表1表2或的元素,但它不会让我删除从表3给了我以下异常的元素:
“因为一个或多个外键属性是不可空的,所以不能更改关系。当对关系进行更改时,相关外键属性设置为空值,如果外键不支持空值,必须定义新的关系,必须为外键属性指定另一个非空值,或者必须删除不相关的对象。“
贝娄是我的模型构造器:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Table2>()
.HasRequired(x=>x.Table1)
.WithMany(x =>x.Table2Collection)
.WillCascadeOnDelete(true);
modelBuilder.Entity<Table3>()
.HasRequired(x=>x.Table2)
.WithMany(x =>x.Table3Collection)
.WillCascadeOnDelete(true);
}
我怀疑我可能没有正确配置模型构建器,但我似乎无法弄清楚如何将其配置为允许删除的元素键入Table3。任何帮助,将不胜感激。