我有以下两个类:
[Table("Products")]
public class Product
{
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public virtual ICollection<Process> Processes { get; set; }
public Product()
{
this.Processes = new HashSet<Process>();
}
}
和
[Table("Processes")]
public class Process
{
public int Id { get; set; }
public string Name { get; set; }
public string MachineName { get; set; }
//list of all products
public virtual ICollection<Product> Products { get; set; }
public Process()
{
this.Products = new HashSet<Product>();
}
}
如您所见,一个产品可以有多个流程,一个流程可以绑定到多个产品。 (例如产品主席包含以下流程:削减,钻取,拧紧等......
在我OnModelCreating
的{{1}}方法下,我指定了多对多关系,如下所示:
DataContext
这会创建一个名为 modelBuilder.Entity<Process>()
.HasMany<Product>(s => s.Products)
.WithMany(c => c.Processes)
.Map(cs =>
{
cs.MapLeftKey("Process_ProcessId");
cs.MapRightKey("Product_ProductId");
cs.ToTable("ProcessProducts");
});
的新表,其中存储了多对多的关系。
我现在的问题是,当我删除时,例如我的数据库中的产品,我想自动删除ProcessProducts
表中的所有行,其中使用了特定的ProcessProducts
。我想在我的modelBuilder下配置ProductId
,但它不允许我这样做。
也许就是这样,我如何删除错误的项目?
CascadeDelete
对此事项的任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
每个案例都需要配置级联的深度。所以问题是:你想要多深:
如果您删除Product
,则应删除与其关联的de Process(es)
,如果此Process(es)
有其他Product(s)
应该级联保留此链删除?
也许通过级联删除,您只需要删除Product
和Process
之间的连接(多对多关系)。如果是这种情况,您只需要这样做:
public void DeleteProduct(Product entity)
{
if (entity == null) throw new ArgumentNullException("entity");
entity = _context.Set<Product>().First(f => f.Id == entity.Id);
_context.Set<Product>().Remove(entity);
_context.SaveChanges();
}
这应删除与Product
相关联的ProcessProducts
和所有Product
注册管理机构。