是否可以在onModelCreating中进行流畅的配置而无需执行级联删除?

时间:2018-11-07 08:29:22

标签: c# asp.net-core entity-framework-core

基本上我有模型,例如

@ViewChild('myDirective') myDirective : MyDirective;

...
clickTest() {
    this.myDirective.selectionMade();   // In this section, call (onSelect).
}

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

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; }
}

不幸的是,它真的没有用

  

DELETE语句与REFERENCE约束“ FK_Cars_Dealer_DealerId”冲突。   在数据库“ Test”的表“ dbo.Cars”的列“ DealerId”中发生了冲突。

关于在没有流畅配置的情况下如何执行带关系删除的任何想法?

  

[CascadeDelete]属性。

似乎不在EF Core中

1 个答案:

答案 0 :(得分:2)

答案是-不,这是不可能的,因为这是这种类型的模型(Cascade Delete for optional relationhips)的常规行为,当常规行为不适合您时,您应该使用数据注释/流利的方式覆盖它们API。由于只能使用fluent API来指定级联删除行为,因此必须使用fluent配置。

如果您的关系是required,例如Car具有明确的* non nullable&FK public Guid DealerId { get; set; },但问题是您可以关闭级联删除,答案是一样的。

简短地说,使用流畅的配置,这只是存在数据注释/流畅的API的情况之一。最小值是

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

别忘了生成新的迁移并更新数据库。