我已经使用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();
错误
操作失败:因为一个或多个关系无法更改 外键属性是不可为空的。当对相关性进行更改时 onship,相关的外键属性设置为空值。如果是外国人 - key不支持空值,必须定义新的关系,foreig 必须为n-key属性分配另一个非空值或不相关的对象 必须删除。
任何人都可以帮我一次删除父表记录和子表记录吗?
谢谢, 萨姆帕斯。
答案 0 :(得分:0)
您的映射不正确。您必须为反向导航属性.WithRequired()
:
ProductImages.Product
.WithRequired(d => d.Product)
只有您的实体不具有反向导航属性时,才必须使用无参数版本的WithRequired
。