Entity Framework 5(4.4)是否支持部分主键映射的外键?

时间:2013-07-26 23:11:50

标签: entity-framework-5 foreign-key-relationship composite-primary-key

我不确定我在标题中使用了正确的术语,但这是我需要做的......

我有一个UserJobs表,它在列EMPNO和EMPJOBNO上有一个复合主键。 我有另一个表UserJobAccounts,它在EMPNO,EMPJOBNO和JOBACCOUNTNO上有一个复合主键

我是否可以使用此架构将一个UserJob正确映射到多个UserJobAccounts?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。模型草图和带数据注释的映射如下所示:

public class UserJob
{
    [Key, Column(Order = 1)]
    public int EmpNo { get; set; }
    [Key, Column(Order = 2)]
    public int EmpJobNo { get; set; }

    public ICollection<UserJobAccount> Accounts { get; set; }
}

public class UserJobAccount
{
    [Key, ForeignKey("Job"), Column(Order = 1)]
    public int EmpNo { get; set; }
    [Key, ForeignKey("Job"), Column(Order = 2)]
    public int EmpJobNo { get; set; }
    [Key, Column(Order = 3)]
    public int JobAccountNo { get; set; }

    public UserJob Job { get; set; }
}

或者没有数据注释和Fluent API:

modelBuilder.Entity<UserJob>()
    .HasKey(uj => new { uj.EmpNo, uj.EmpJobNo });

modelBuilder.Entity<UserJobAccount>()
    .HasKey(uja => new { uja.EmpNo, uja.EmpJobNo, uja.JobAccountNo });

modelBuilder.Entity<UserJobAccount>()
    .HasRequired(uja => uja.Job)
    .WithMany(uj => uj.Accounts)
    .HasForeignKey(uja => new { uja.EmpNo, uja.EmpJobNo });