无法使用 EF Core 的 Fluent API OnDelete 方法:"does not contain a definition for OnDelete"



当父实体被删除时,我正在尝试使用EF Core的Fluent APIOnDelete方法来删除依赖实体,如图所示。

我正在DbContext课上尝试做以下操作:

protected override void OnModelCreating(Microsoft.EntityFrameworkCore.ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasOne(u => u.Nutrition)
.OnDelete(DeleteBehavior.Delete);
}
}

这就是我被困了几个小时的地方,因为我在OnDeleteDeleteBehavior下面看到了一条令人讨厌的红色歪歪扭扭的线,下面有两条错误消息。

'ReferenceAviationBuilder<产品,营养>'不包含"OnDelete"的定义,并且没有可访问的扩展方法"OnDelete"接受类型的第一个参数'引用导航生成器<产品,营养>'可以找到(是否缺少using指令或程序集参考?(

"删除行为"不包含"删除"的定义

这就是我的模型:

public class Product
{
[Key]
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductType { get; set; }
public Nutrition ProductNutrition { get; set; }
}
public class Nutrition
{
[Key]
public int NutritionId { get; set; }
public string Ingredients { get; set; }
}

当我把光标放在modelBuilder.Entity上时,我看到它是一个Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder。当我在这里查看该类的文档时,我没有看到OnDelete方法。我做错了什么?其他人是如何随意使用OnDelete方法而没有问题的?

以下是我项目中的包列表:

  • Microsoft.EntityFrameworkCore(3.1.4(
  • Microsoft.EntityFrameworkCore.抽象(3.1.4(
  • Microsoft.EntityFrameworkCore.Relational(3.1.4(
  • Npgsql(4.1.3.1(

想明白了。

OnDelete方法仅适用于WithOneWithMany方法。换句话说,在定义关系时有必要使用Has/With模式,如下所述:https://www.learnentityframeworkcore.com/configuration/fluent-api/hasone-method

所以。。。在我可以做任何其他事情之前,我必须返回并更改我的Nutrition类,以包含对父类的引用,如下所示:

public class Nutrition
{
[Key]
public int NutritionId { get; set; }
public string Ingredients { get; set; }
public Product Product { get; set; } //added this
}

然后在我的OnModelCreating方法中,我可以这样做:

modelBuilder.Entity<Product>()
.HasOne(a => a.ProductNutrition)
.WithOne(b => b.Product)
.OnDelete(DeleteBehavior.Cascade);

这定义了Product和Nutrition之间的一对一关系,现在我可以使用OnDelete方法设置DeleteBehavior

最新更新