问题描述
让我们有两个实体:
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")
。