与 [ForeignKey("ForeignId")] 的一对一关系等效于 Fluent Api - EF Core

One-to-one relationship with [ForeignKey("ForeignId")] equivalent by Fluent Api - EF Core

让我们有两个实体:

public class Function 
{
    public int Id {get;set;}

    [Required]
    public virtual FunctionConfiguration FunctionConfiguration {get;set;}
}
public class FunctionConfiguration 
{
    public int Id {get;set;}

    [ForeignKey("FunctionId")]
    public virtual Function Function {get;set;}
}

这是我当前的配置:

builder
    .HasOne(v => v.Function)
    .WithOne(f => f.FunctionConfiguration)
    .IsRequired()
    .OnDelete(DeleteBehavior.Cascade);

现在我想摆脱[ForeignKey("FunctionId")]属性并像这样更新我的配置:

builder
    .HasOne(v => v.Function)
    .WithOne(f => f.FunctionConfiguration)
    .IsRequired()
    .HasForeignKey("FunctionId")
    .OnDelete(DeleteBehavior.Cascade);

所以我的实体 class 将没有数据库属性。

问题

当我尝试通过创建新的迁移来测试我的模式时,出现以下错误:

You are configuring a relationship between 'FunctionConfiguration' and 'Function' but have specified a foreign key on 'FunctionId'. The foreign key must be defined on a type that is part of the relationship.

我做错了什么?为什么我不能像 ForeignKey 属性一样使用 "FunctionId" 字符串?

不要回答“将 FunctionId 添加到 FunctionConfiguration class” - 我不想这样 属性 在我的 class.

谢谢。

因为正如 documentation 所述,此方法的第一个参数采用依赖实体类型的名称,而不是您要生成的外键的名称。所以你的代码应该是这样的 .HasForeignKey(typeof(FunctionConfiguration), "FunctionId").