EF关系注释方法 - 有什么区别?

时间:2015-05-22 16:31:17

标签: entity-framework ef-code-first

使用注释定义外键关系时,我看到了两种不同的方法来实现这一点。为什么有两种方法可以做到这一点?一种方式比另一种更标准吗?使用一个而不是另一个有什么好处吗?

我能想到的一个好处是,当将它用于复合键时,如果您注释相关实体,则只需要一个注释而不是多个注释。

[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
}

1 个答案:

答案 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;}
}
相关问题