2012-11-12 67 views
0

我有兩個表與多對多的關係鏈接。當我試圖插入一個新的鏈接對象時,MVC實體框架隱藏了鏈接表並忽略它。使用MVC插入多對多記錄

表中的personID和interventionID與這兩者的組合PK相關聯。

我添加了一個新的介入,它創建了一個作爲新密鑰的interventioID。我已將personID傳遞給控制器​​,調試器使用正確的值顯示它。

然而,當我打電話:

 db.tInterventions.Add(tintervention); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 

...鏈接表沒有得到填補。

的創建方法如下:

[HttpPost] 
public ActionResult Create([Bind(Exclude = "interventionID")]tIntervention tintervention, 
tPerson tperson, 
int id, 
int? personID) 

我怎麼能強迫鏈接表插入?

+0

您的模型配置是否正確?你有沒有嘗試沒有MVC重現 - 只是一個簡單的3線應用程序?我擔心這裏沒有足夠的細節可以提供幫助,而且您也不會在最簡單的級別上進行故障排除。 – Pawel

+0

EF模型是從數據庫創建的,據我所知是正確的。數據庫中的關係適用於直接sql查詢。問題似乎是personID已經存在,因此干預表不需要對model.isvalid的鏈接表進行任何更新以返回true。因此,干預表獲得一個插入,但沒有任何東西會觸發鏈接表上的插入。還有什麼我需要做的。有沒有我可以發佈的代碼會有幫助? – melkisadek

回答

0

問題歸結於PersonID在可選參數中的事實。因爲該參數不是必需的,所以在填充PersonID但未將值傳遞給模型時,ModelState.IsValid將返回True。

我加了一個條件,檢查PERSONID,然後做了人的查找/綁定到干預如下:

[HttpPost] 
public ActionResult Create([Bind(Exclude = "interventionID")]tIntervention tintervention, int id, int? personid) 
{ 
    tintervention.householdID = id; 

    if (ModelState.IsValid) 
    { 
     db.tInterventions.Add(tintervention); 

     if (personid.HasValue) 
     { 
      int personID = personid.Value; 

      var q = (
         from p in db.tPersons 
         where (p.personID == personID) 
         select p.personID 
         ); 
      personID = q.FirstOrDefault(); 
      tPerson tperson = db.tPersons.Find(personID); 

      tintervention.tPersons.Add(tperson); 
     } 

     db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 


    return View(tintervention); 
} 

這可能不是實現這一目標的最佳方式,但它的工作原理。歡迎進一步的意見。