使用linq的实体框架级联删除

时间:2018-08-14 16:01:37

标签: c# asp.net-mvc entity-framework

我有一个表counter和另一个表Products

ProductDetails

如您所见,当我创建此表时,我禁用了 CreateTable( "dbo.Products", c => new { Id = c.Guid(nullable: false), // other fields here // .... //.... }) .PrimaryKey(t => t.Id) .ForeignKey("dbo.ProductType", t => t.ProductTypeId, cascadeDelete: false) .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: false) .Index(t => t.UserId) .Index(t => t.ProductTypeId); CreateTable( "dbo.ProductDetails", c => new { Id = c.Guid(nullable: false), // other fields here // .... //.... }) .PrimaryKey(t => t.Id) .ForeignKey("dbo.Products", t => t.ProductId, cascadeDelete: false) .Index(t => t.ProyectoId) 。但是,经过一些开发,我意识到我需要删除一个产品。现在,我的问题是我不能仅仅通过执行类似的操作来删除产品

cascadeDelete

我该如何级联删除我的产品表?我可以对 var product = getProductById(Id); _dbContext.Product.Remove(product); _dbContext.SaveChanges(); 进行查询吗?

cascadeDelete

如果不可能,如何更改我的表_dbContext.Product.cascadeDelete... //this is not real code Products

谢谢

1 个答案:

答案 0 :(得分:1)

解决方案1:

首先,使用现有配置,您必须先删除ProductDetails的{​​{1}},然后才能删除Product,如下所示:

Product

解决方案2:

在您的List<ProductDetails> productDetailsList = _dbContext.ProductDetails.Where(pd => pd.ProductId == Id).ToList(); _dbContext.ProductDetails.RemoveRange(productDetailsList); var product = getProductById(Id); _dbContext.Product.Remove(product); _dbContext.SaveChanges(); 类中,按如下所示重写实体配置:

DbContext

现在运行新迁移并相应地更新数据库。

希望您的问题得到解决!