Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架与ForeignKey的一对一可选关系_C#_Entity Framework_One To One - Fatal编程技术网

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

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

我正在开发一个实体框架代码优先数据库。我有两个具有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);
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是没有意义的,正如我之前所说的。