与 Fluent Api 等效的 [ForeignKey("ForeignId")] 一对一关系 - 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);

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

问题

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

您正在配置 'FunctionConfiguration' 和 'Function' 但在 'FunctionId' 上指定了外键。这 外键必须定义在属于 关系。

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

不要回答“将 FunctionId 添加FunctionConfiguration 班级” - 我不想在我的班级中有这样的财产。

谢谢。

解决方法

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