创建现有记录的与外键关联
问题描述:
副本我有以下型号创建现有记录的与外键关联
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)与同Role.Name和Program.Name分别在Roles和Progams表中。
我的目标是让ProfessionalEmploymentRecord p与每个记录p的单个(唯一)程序和角色有关联。
编辑:
为例
如果我让ProfessionalEmploymentRecord p为 p.Role.Name = “分析” p.Program.Name = “A”
然后添加( )函数创建包含RoleId = 2和ProgramId = 2的ProfessionalEmploymentRecords中的新记录
在角色和程序表中,我以 结束角色 ID名称 1分析员 2分析员
计划 ID名称 1的 2一
为了简化问题,为什么添加功能创建条目到其他两个表?
答
在程序和角色类中添加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; }
}
p在添加(p)是来自剃刀视图创建的输入。 – Rafet 2012-08-08 08:03:57
这看起来像重复操作。如果p已经有一个程序,为什么你需要为它分配一个ID? GetProgramId和GetProfessionalId中的代码是什么? – 2012-08-08 08:05:43
Amiram,Get * Id看起来像private int GetProgramId(string Name){try {int ID =(from p in db.Programs where p.Name.Equals(Name)select p.ID).First();返回ID; } catch {//抛出新的异常(“找不到名称的ID”+名称);返回0; }} – Rafet 2012-08-08 08:11:31