使用注释定义外键关系时,我看到了两种不同的方法来实现这一点。为什么有两种方法可以做到这一点?一种方式比另一种更标准吗?使用一个而不是另一个有什么好处吗?
我能想到的一个好处是,当将它用于复合键时,如果您注释相关实体,则只需要一个注释而不是多个注释。
[Table("TEAM")]
public class Team
{
[Column("TEAM_ID"), Key]
public int TeamID { get; set; }
public virtual List<Player> Players { get; set; }
}
方法1 - 注释相关实体
[Table("PLAYER")]
public class Player
{
[Column("PLAYER_ID"), Key]
public int PlayerID { get; set; }
[Column("TEAM_ID")]
public int TeamID { get; set; }
[ForeignKey("TeamID")] //FOREIGN KEY ANNOTATION
public virtual Team Team { get; set; } //RELATED ENTITY
}
方法2 - 注释外键列
[Table("PLAYER")]
public class Player
{
[Column("PLAYER_ID"), Key]
public int PlayerID { get; set; }
[ForeignKey("Team")] //FOREIGN KEY ANNOTATION
[Column("TEAM_ID")]
public int TeamID { get; set; }
public virtual Team Team { get; set; } //RELATED ENTITY
}
答案 0 :(得分:0)
两种方法之间似乎没有显着差异。两者都将导致相同的类映射。使用一种方法而不是另一种方法的唯一好处是复合键。对于复合键,使用方法1 - 注释相关实体更具可读性,因为它只需要一行注释而不是多行注释。
如果组合键不是问题,请使用项目标准的任何约定。
public class Parent
{
[Key, Column(Order = 1)]
public int A {get;set;}
[Key, Column(Order = 2)]
public int B {get;set;}
public virtual List<Child> Children {get;set;}
}
方法1 - 注释相关实体
public class Child
{
public int A {get; set;}
public int B {get; set;}
[ForeignKey("A, B")]
public virtual Parent Parent {get; set;}
}
方法2 - 注释外键列
public class Child
{
[ForeignKey("Parent"), Column(Order = 1)]
public int A {get; set;}
[ForeignKey("Parent"), Column(Order = 2)]
public int B {get; set;}
public virtual Parent Parent {get; set;}
}