使用外键关联创建现有记录的副本

时间:2012-08-08 07:57:48

标签: c# asp.net-mvc ef-code-first foreign-key-relationship

我有以下型号

public class ProfessionalEmploymentRecord
{
    public int ID { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    public virtual Role Role { get; set; }
    public virtual Program Program { get; set; }
}

public class Program
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Role
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public ActionResult Add(ProfessionalEmploymentRecord p)
{
    if (ModelState.IsValid)
    {
        //Check which program is being considered
        p.Program.ID = GetProgramId(p.Program.Name);
        p.Role.ID = GetProfessionalId(p.Role.Name);
        db.ProfessionalEmploymentRecords.Add(p);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(p);
}

当使用Add()时,我最终得到两个记录(差异是主键ID),分别在Roles和Progams表中具有相同的Role.Name和Program.Name。

我的目标是让ProfessionalEmploymentRecord p与每个记录的单个(唯一)程序和角色建立联系。

编辑:

示例

如果我让ProfessionalEmploymentRecord成为 p.Role.Name =“分析师” p.Program.Name =“A”

然后Add()函数在ProfessionalEmploymentRecords中创建一条新记录,其中包含RoleId = 2和ProgramId = 2

在角色和程序表中,我最终得到了 角色 ID名称 1分析师 2分析师

程序 ID名称 1 A. 2 A

为简化问题,为什么Add函数会在其他两个表中创建条目?

1 个答案:

答案 0 :(得分:0)

在Program and Role类中添加ProfessionalEmploymentRecord的引用。

public class Program
{
   public int ID { get; set; }
   public string Name { get; set; }
   public virtual ProfessionalEmploymentRecord ProfessionalEmploymentRecord { get; set; }
}

public class Role
{
   public int ID { get; set; }
   public string Name { get; set; }
   public virtual ProfessionalEmploymentRecord ProfessionalEmploymentRecord { get; set; }
}