2012-08-08 146 views
0

副本我有以下型號創建現有記錄的與外鍵關聯

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一

爲了簡化問題,爲什麼添加功能創建條目到其他兩個表?

+0

p在添加(p)是來自剃刀視圖創建的輸入。 – Rafet 2012-08-08 08:03:57

+0

這看起來像重複操作。如果p已經有一個程序,爲什麼你需要爲它分配一個ID? GetProgramId和GetProfessionalId中的代碼是什麼? – 2012-08-08 08:05:43

+0

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

回答

0

在程序和角色類中添加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; } 
}