我有一个表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
。
谢谢
答案 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
现在运行新迁移并相应地更新数据库。
希望您的问题得到解决!