在onModelCreating中,是否可以在没有流畅配置的情况下执行级联删除



基本上我有型号,例如

public class Dealer
{
[Key]
public Guid Id { get; set; }
public List<Car> Cars { get; set; } = new List<Car>();
}
public class Car
{
[Key]
public Guid Id { get; set; }
public string Model { get; set; }
}

我一直在尝试做这样的事情:

var dealer = _context.Dealers.FirstOrDefault(x => x.Id == Id);
foreach (var car in dealers.Cars)
{
_context.Cars.Remove(car);
// _context.Entry(car).State = EntityState.Deleted;
}
dealer.Cars.Clear();
_context.Dealers.Remove(dealer);
_context.SaveChanges();

不幸的是,并没有真正起作用

DELETE语句与REFERENCE约束"FK_Cars_Daler_DealerId"冲突。冲突发生在数据库"Test"、表"dbo.Cars"、列"DealerId"中。

关于如何在没有fluent配置的情况下使用关系执行删除,有什么想法吗?

〔级联删除〕属性。

似乎不在EF Core 中

答案是-不,这是不可能的,因为这是这种类型模型的常规行为(Cascade Delete用于可选关系(,当常规行为对您不起作用时,您应该用数据注释/流利的API覆盖它们。由于级联删除行为只能使用fluent API指定,因此必须使用fluent配置。

如果需要您的关系,则情况会有所不同,例如Car具有显式*non-nullable&FKpublic Guid DealerId { get; set; },但问题是你能关闭级联删除吗?答案是一样的。

很快,使用fluent配置,这只是数据注释/fluent API存在的原因之一。最小值为

modelBuilder.Entity<Dealer>().HasMany(e => e.Cars).WithOne()
.OnDelete(DeleteBehavior.Cascade);

不要忘记生成新的迁移并更新数据库。

相关内容

最新更新