基本上我有型号,例如
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);
不要忘记生成新的迁移并更新数据库。