C# EF5.0代码优先方法父表中的级联删除未正确删除?
我使用EntityFramework5.0代码优先的方法定义了子模型的级联删除。 现在,当对父表记录执行删除操作时,相应的子表记录不会被删除。子表具有来自父表的外键引用。 以下是我的型号代码:C# EF5.0代码优先方法父表中的级联删除未正确删除?,c#,entity-framework-5,C#,Entity Framework 5,我使用EntityFramework5.0代码优先的方法定义了子模型的级联删除。 现在,当对父表记录执行删除操作时,相应的子表记录不会被删除。子表具有来自父表的外键引用。 以下是我的型号代码: //"Product" parent class public class Product { [Key, Column(Order = 0)] [Required] [MaxLength(50)] public string Upc { get; set; } publi
//"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);
}
/“产品”父类
公共类产品
{
[键,列(顺序=0)]
[必需]
[MaxLength(50)]
公共字符串Upc{get;set;}
公共双倍高度{get;set;}
公共双宽度{get;set;}
公共虚拟列表ProductImages{get;set;}
公共产品()
{
this.ProductImages=新列表();
}
}
//“ProductImages”子类
公共类产品图片
{
[键,列(顺序=0)]
公共字符串Upc{get;set;}
[外键(“Upc”)]
公共虚拟产品产品{get;set;}
[键,列(顺序=1)]
公共短定向{get;set;}
}
//级联删除约束
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(t=>t.ProductImages)
.WithRequired()
.HasForeignKey(d=>d.Upc)
.WillCascadeOnDelete(真);
}
删除记录时,我在context.SaveChanges()代码>
错误
操作失败:无法更改关系,因为一个或多个
的外键属性不可为空。当对关系进行更改时
在SHIP上,相关外键属性设置为空值。如果外国人-
键不支持空值,必须定义新关系,foreig
必须为n-key属性分配另一个非空值,或不相关的对象
必须删除
有谁能帮我一次删除父表记录和子表记录吗
谢谢,
Sampath.您的映射不正确。必须为反向导航属性ProductImages.Product
提供表达式,而不是不带参数的.WithRequired()
:
.WithRequired(d => d.Product)
只有在您的实体没有反向导航属性时,才必须将无参数版本的与required一起使用。您好,我已尝试修改上述代码行。但我还是遇到了同样的问题。请帮帮我谢谢Sampath你能告诉我你是如何删除家长的吗?(点击问题下方的“编辑”链接)