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

时间:2014-03-18 16:08:59

标签: c# entity-framework one-to-one

我正在开发一个实体框架代码第一数据库。我有两个0..1-0..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可能有或没有Prestazione(注意很长?)。

现在,我真的无法弄清楚如何配置与FluentAPI的关系。我不能使用.Map,因为我已经在我的实体上有IdPrestazione。

这就是我的尝试:

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

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

我尝试修改迁移产生的迁移代码(用于创建数据库),但现在我收到了非有效字段的错误(“Prestazione_Id不是有效字段”)。

如何让EF识别IdPrestazione属性? 感谢!!!

1 个答案:

答案 0 :(得分:0)

尝试这样的方法,将对象放在一个字段中,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; }
}