在 ASP.NET 5 和 EF Core 中,级联删除的功能是通过配置实体之间的关系来实现的。以下是一个示例代码,演示如何在 ASP.NET 5 和 EF Core 中配置级联删除。
假设有两个实体模型:Category
和 Product
,它们之间是一对多的关系,一个 Category
可以有多个 Product
。
首先,需要在实体模型中定义它们之间的关系,并设置级联删除选项:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public List Products { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
然后,在 DbContext
中配置级联删除选项:
public class ApplicationDbContext : DbContext
{
public DbSet Categories { get; set; }
public DbSet Products { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasOne(p => p.Category)
.WithMany(c => c.Products)
.OnDelete(DeleteBehavior.Cascade);
}
}
在上面的代码中,我们使用 OnDelete(DeleteBehavior.Cascade)
方法来配置级联删除。这将使从 Category
实体中删除时,与之相关的所有 Product
实体也会被删除。
请确保在调用 SaveChanges()
方法时,级联删除选项会生效:
using (var context = new ApplicationDbContext())
{
var category = context.Categories.Find(categoryId);
context.Categories.Remove(category);
context.SaveChanges();
}
在上面的代码中,删除 Category
实体时,与之相关的所有 Product
实体也会被级联删除。
总结:要在 ASP.NET 5 和 EF Core 中实现级联删除,需要在实体模型和 DbContext
中进行相应的配置。在 OnModelCreating
方法中使用 OnDelete(DeleteBehavior.Cascade)
方法来设置级联删除选项,然后在调用 SaveChanges()
方法时生效。