C# EF5.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

我使用EntityFramework5.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);
}
/“产品”父类
公共类产品
{
[键,列(顺序=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你能告诉我你是如何删除家长的吗?(点击问题下方的“编辑”链接)