EF 4.1中的多对多关系

时间:2011-10-13 11:13:19

标签: entity-framework entity-framework-4 entity-framework-4.1

我正在做一个有3个桌子的小型应用程序。

申请人 位置 ApplicantsPerPosition。

最后一个与其他2个表的关系是多对多的。

但是我使用的是CODE First方法,但我不确定我的代码是否正确。

我在其他两个表中添加了ICollection和ICollection。

这是否正确?我这样做是为了能够轻松浏览关联对象的属性,但是我不确定最后是否只会像在DATABASE First方法中那样将其翻译成3个表。

示例代码在这里:

public class Position
    {
        public int id { get; set; }
        [StringLength(20, MinimumLength=3)]
        public string name { get; set; }
        public int yearsExperienceRequired { get; set; }
        public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }
    }

    public class Applicant
    {
        public int ApplicantId { get; set; }
        [StringLength(20, MinimumLength = 3)]
        public string name { get; set; }
        public string telephone { get; set; }
        public string skypeuser { get; set; }
        public ApplicantImage photo { get; set; }
        public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }

    }

    public class ApplicantPosition
    {
        public virtual ICollection<Position> appliedPositions { get; set; }
        public virtual ICollection<Applicant> applicants { get; set; }
        public DateTime appliedDate { get; set; }
        public int StatusValue { get; set; }

        public Status Status
        {
            get { return (Status)StatusValue; }
            set { StatusValue = (int)value; }
        }


    }

1 个答案:

答案 0 :(得分:2)

如果要将连接表建模为单独的实体,则该实体与其他2个实体之间存在一对多关系。您还需要将主键列公开为链接实体中的属性。

public class Position
{
    public int id { get; set; }
    [StringLength(20, MinimumLength=3)]
    public string name { get; set; }
    public int yearsExperienceRequired { get; set; }
    public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }
}

public class Applicant
{
    public int ApplicantId { get; set; }
    [StringLength(20, MinimumLength = 3)]
    public string name { get; set; }
    public string telephone { get; set; }
    public string skypeuser { get; set; }
    public ApplicantImage photo { get; set; }
    public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }

}

public class ApplicantPosition
{
    public int ApplicantId { get; set; }

    public int PositionId { get; set; }

    public virtual Position Position { get; set; }

    public virtual Applicant Applicant { get; set; }

    public DateTime appliedDate { get; set; }
    public int StatusValue { get; set; }

    public Status Status
    {
        get { return (Status)StatusValue; }
        set { StatusValue = (int)value; }
    }
}