我已经使用 Entity Framework 5.0 代码优先方法为子模型定义了级联删除。现在对父表记录执行删除操作时,相应的子表记录不会被删除。子表有来自父表的外键引用。在下面我附上我的模型代码:
//"Product" parent class
public class Product
{
[Key, Column(Order = 0)]
[Required]
[MaxLength(50)]
public string Upc { get; set; }
public double Height { get; set; }
public double Width { get; set; }
public virtual List<ProductImages> ProductImages { get; set; }
public Product()
{
this.ProductImages = new List<ProductImages>();
}
}
//"ProductImages" child class
public class ProductImages
{
[Key, Column(Order = 0)]
public string Upc { get; set; }
[ForeignKey("Upc")]
public virtual Product Product { get; set; }
[Key, Column(Order = 1)]
public short Orientation { get; set; }
}
//Cascade delete constraint
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Product>()
.HasMany(t => t.ProductImages)
.WithRequired()
.HasForeignKey(d => d.Upc)
.WillCascadeOnDelete(true);
}
删除记录时出现以下错误
context.SaveChanges();
错误
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
谁能帮我一次删除父表记录和子表记录?
谢谢,山姆帕特。