我在 Entity Framework 6 中使用 TPT code-first 并具有以下设置:
public abstract class Product
{
[Key]
public string ProductID { get; set; }
// a bunch of trivial properties like dates and floats
}
[Table("SpecialProducts")]
public class SpecialProduct : Product
{
// more trivial properties
public List<Property> MyProperties { get; set; }
}
public class Property
{
[Key]
public int ID { get; set; }
[Required]
public SpecialProduct Product { get; set; }
// property data
}
public class MyDbContext : DbContext
{
public DbSet<Product> AllProducts { get; set; }
public MyDbContext()
: base("MyDataBase")
{}
public RemoveSomeProducts()
{
var products = from product in AllProducts where /* some condition */ select product;
AllProducts.RemoveRange(products);
SaveChanges();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// I know I don't need both statements, and my guess is I need the first, but at this point I don't know anything anymore
modelBuilder.Entity<Property>()
.HasRequired(property => property.Product)
.WithMany(product => product.MyProperties)
.WillCascadeOnDelete(true);
modelBuilder.Entity<SpecialProduct>()
.HasMany(product => product.MyProperties)
.WithRequired(property => property.Product)
.WillCascadeOnDelete(true);
}
}
调用时RemoveSomeProducts()出现以下异常:
SqlException: DELETE 语句与 REFERENCE 约束“FK_dbo.Properties_dbo.SpecialProducts_Product_ProductID”冲突。冲突发生在数据库“MyDataBase”、表“dbo.Properties”、“Product_ProductID”列中。
对我来说,这听起来像是Properties被删除SpecialProducts的东西没有被删除。我对数据库的经验很少,但根据我的理解,这应该使用级联删除来修复,但我似乎无法配置它。
所以我的问题显然是:我该如何解决这个问题?
Cats萌萌
相关分类