实体框架与ForeignKey一对一的可选关系

本文关键字:关系 一对一 框架 ForeignKey 实体 | 更新日期: 2023-09-27 17:50:45

我正在开发一个实体框架代码第一数据库。我有两个班,分别是0..1 ..1关系:

[Table("VociRicevuta")]
public partial class VoceRicevuta
{
    [Key]
    public long Id { get; set; }
    [...]
    [ForeignKey("Prestazione")]
    public long? IdPrestazione { get; set; }
    [...]
    public virtual Prestazione Prestazione { get; set; }
}

[Table("Prestazioni")]
public partial class Prestazione
{
    [Key]
    public long Id { get; set; }
    [...]
    [InverseProperty("Prestazione")]
    public virtual VoceRicevuta VoceRicevuta { get; set; }
}

Prestazione可以从VoceRicevuta引用,也可以不从VoceRicevuta引用,也可以不从VoceRicevuta引用Prestazione(注意长?).

现在,我真的不知道如何配置与FluentAPI的关系。我不能使用。map,因为我已经在我的实体上有IdPrestazione了。

这是我尝试过的:

 modelBuilder.Entity<VoceRicevuta>().HasOptional(x => x.Prestazione).WithOptionalDependent(x => x.VoceRicevuta);

但是这段代码完全忽略了我已经存在的IdPrestazione字段,并在数据库中创建一个新的Prestazione_Id字段来创建FK。我需要这个"IdPrestazione"有很多原因,包括性能。

我试图修改迁移产生的迁移代码(用于数据库创建),但现在我得到无效字段的错误("Prestazione_Id不是一个有效的字段")。

如何使EF识别IdPrestazione属性?谢谢! !

实体框架与ForeignKey一对一的可选关系

尝试这样做,通过将对象作为字段放在里面,EF将为您执行外键关系

[Table("VociRicevuta")]
public partial class VoceRicevuta
{
[Key]
public virtual Prestazione { get; set; }
[...]

public long? IdPrestazione { get; set; }
[...]
public virtual Prestazione Prestazione { get; set; }
}

[Table("Prestazioni")]
public partial class Prestazione
{
[Key]
public long Id { get; set; }
[...]
[InverseProperty("Prestazione")]
public virtual VoceRicevuta VoceRicevuta { get; set; }
}