EF5.0代码中的级联删除首先接近父表没有正确删除?

时间:2013-10-20 10:42:52

标签: c# entity-framework-5

我已经使用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属性分配另一个非空值或不相关的对象   必须删除。

任何人都可以帮我一次删除父表记录和子表记录吗?

谢谢, 萨姆帕斯。

1 个答案:

答案 0 :(得分:0)

您的映射不正确。您必须为反向导航属性.WithRequired()

提供表达式,而不是没有参数的ProductImages.Product
.WithRequired(d => d.Product)

只有您的实体具有反向导航属性时,才必须使用无参数版本的WithRequired