gpt4 book ai didi

asp.net - 两个属性的 CodeFirst 外键

转载 作者:行者123 更新时间:2023-12-01 16:03:32 24 4
gpt4 key购买 nike

我想将一个属性用作两个独立实体的外键 - 一次作为复合外键的一部分,一次作为单个外键。这是我的意思的一个简单示例:

public class ParentEntity{
[Key, Column(Order = 1)]
String Id {get; set;}
[Key, Column(Order = 2), ForeignKey("Year")]
int YearId {get; set;}

[ForeignKey("YearId")]
Year Year;
virtual ICollection<ChildEntity> Children {get; set;}
}

public class ChildEntity{
[Key, Column(Order = 0), ForeignKey("Parent")]
String Id {get; set;}
[Key, Column(Order = 1), ForeignKey("Parent")]
String ParentId {get; set;}
[Key, Column(Order = 2), ForeignKey("Parent, Year")]
int YearId {get; set;}

[ForeignKey("ParentId, YearId")]
ParentEntity Parent{get; set;}

[ForeignKey("YearId")]
Year Year {get; set;}
}

public class Year{
[Key]
int YearId {get; set;}
}

ChildEntity 中的 YearId/Year 属性应作为 ParentEntity 的主键(ParentId/Year)的一部分,以及 的外键>年份表。

但是,标记 ForeignKey("Parent, Year") 无效,因为它只能将一个参数传递给导航属性。这是我收到的错误消息:

Additional information: The ForeignKeyAttribute on property 'YearId' on type 'CodeFirst.Models.ChildEntity' is not valid. 
The navigation property 'Parent, Year' was not found on the dependent type 'CodeFirst.Models.ChildEntity'.
The Name value should be a valid navigation property name.

我认为这是有道理的,它正在寻找一个名为“Parent, Year”的导航属性,而不是两个名为“Parent”和“Year”的导航属性。

如何强制 EntityFramework/CodeFirst 正确识别此模式?

注意:我将实体命名为“父”/“子”,但它们之间没有继承关系(实际上是所有权关系)。

最佳答案

您只需要导航属性上的 ForeignKeyAttribute 外键属性。不是都。所以像这样:

    public class ParentEntity
{
[Key, Column(Order = 1)]
public String Id { get; set; }
[Key, Column(Order = 2)]
public int YearId { get; set; }

[ForeignKey("YearId")]
Year Year;
public virtual ICollection<ChildEntity> Children { get; set; }
}

public class ChildEntity
{
[Key, Column(Order = 0)]
public String Id { get; set; }
[Key, Column(Order = 1)]
public String ParentId { get; set; }
[Key, Column(Order = 2)]
public int YearId { get; set; }

[ForeignKey("ParentId, YearId")]
public ParentEntity Parent { get; set; }

[ForeignKey("YearId")]
public Year Year { get; set; }
}

public class Year
{
[Key]
public int YearId { get; set; }
}

关于asp.net - 两个属性的 CodeFirst 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com