0

我已经使用 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();

错误

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

谁能帮我一次删除父表记录和子表记录?

谢谢,山姆帕特。

4

1 回答 1

0

您的映射不正确。.WithRequired()您必须为反向导航属性提供表达式,而不是没有参数ProductImages.Product

.WithRequired(d => d.Product)

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

于 2013-10-20T12:50:42.190 回答