与 [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")
.
让我们有两个实体:
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")
.