C# 实体框架与ForeignKey的一对一可选关系
我正在开发一个实体框架代码优先数据库。我有两个具有0..1-0..1关系的类:C# 实体框架与ForeignKey的一对一可选关系,c#,entity-framework,one-to-one,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; } [...] publi
[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);
modelBuilder.Entity().has可选(x=>x.Prestazione)。带有optionalDependent(x=>x.vocorievuta);
但是这段代码完全忽略了我已经存在的IdPrestazione字段,并在数据库中创建了一个新的Prestazione_Id字段来创建te FK。
我需要“IdPrestazione”有很多原因,包括性能
我试图修改迁移生成的迁移代码(用于创建数据库),但现在我得到了无效字段的错误(“Prestazione_Id不是有效字段”)
我如何让EF识别IdRestazione财产?
谢谢 尝试类似的方法,通过将对象作为字段放入其中,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; }
}
对不起,这根本不适合我的型号。事实上,vocerievuta还有其他可选字段,比如Prestazione。您的解决方案意味着Prestazione将是一个必填字段:我已经指定vocerievuta不能引用Prestazione。然后将其设置为null,并放置一个?在类型名称后面是。EF抛出了一个异常,表示将引用类型设为null是没有意义的,正如我之前所说的。