2010-10-01 35 views
0

在我的mvc應用程序中,我有兩個表名爲: 詳細信息(srNo,ID,work),master(ID,名稱,計劃)使用「ID」字段從細節到主人的關鍵關係。 「ID」字段是主表的主鍵。 「srNo」字段是詳細表的主鍵。無法從MVC中存在外鍵的表中刪除該行

從「ID」字段中,這2個表與外鍵關聯。

現在的問題是: 在向數據庫添加任何行時,我們首先在主表中輸入內容,然後在細節表中輸入。 有時由於某些例外情況,當行成功添加到主表中但無法添加詳細表時。然後我想從主表執行回滾。

但是,當我想最近添加的ID值(格羅姆的LINQ to SQL),這是在主表中添加它給我不同的是forign關鍵維吾爾船有刪除的行.....

並在當時詳細表中沒有那個id字段的行。

謝謝

回答

0

它接縫的數據插入子表也。首先必須使用deleteallonsubmit(detail)從主表中刪除詳細表,然後從主表中刪除。你能解釋一下什麼是例外的意思,它是錯誤或您的驗證

public ActionResult CreateRec(Master _Master, IEnumerable<Detail> Detaildata,FormCollection collection) 
{ 
    MasterRepo _MasterRepo = new MasterRepo(); 
    if (ModelState.IsValid) 
     { 
      if (_detail != null) 
      { 
       foreach (var objdetail in DetailData) 
       { 
        Detail _Detail = new Detail(); 
        _Detail.FirstField = objdetail.FirstField; 
        _Detail.SecondField = objdetail.SecondtField; 
        _Master.Detail.Add(_Detail); 
       } 
      } 
      _MasterRepo.Save(); 
     } 

} 
+0

沒有數據插入子表,當我準備從主表中刪除: – 2010-10-01 13:58:23

+0

它不給予任何驗證錯誤,這是給不能刪除其中的外鍵關係的錯誤存在。 – 2010-10-01 13:59:56

+0

你打電話給一個孩子和家長的提交變更,或者兩者都被分開保存到數據庫 – Tassadaque 2010-10-01 14:11:11

0

下面是代碼

主objmaster =新的主(); objmaster.id = count; objmaster.name = name1; .. objEntities.AddObject(「master」,objmaster); objEntities.SaveChanges(); 嘗試 細節objDetail =新細節() master objMaster =(從r在objEntities.master其中r.Id == count select r).First(); objDetail.master = objMaster; //假設我得到任何(格式,空指針例外) objDetail.folow = sfields [0]; //如出現異常,下面的代碼將不會被執行

objEntities.AddObject(「detail」,objDetail); objEntities.SaveChanges(); } 趕上(異常前) {

//在這裏,我想刪除我在主表已經添加了行: //我寫在objEntities此 主objMasters =代碼(從r。 master where r.Id == count select r).ToList(); objEntities.DeleteObject(objMasters); objEntities.SaveChanges(); }

0

我認爲你需要將它們兩個提交到一起,以便它們在同一個事務中。那麼不需要編寫回滾代碼,因爲如果細節失敗,主服務器不會被插入。 試試這個:

master objmaster= new master(); 
objmaster.id =count; 
objmaster.name= name1; 
.. 
objEntities.AddObject("master", objmaster); 
// == removed save changes call here == 
detail objDetail = new detail() 
// == no need to reselect master from the database, you already have it 
// == so just assign it, and that will take care of the references/foreign-key 
objDetail.master = objMaster; // Suppose I get any (format, null pointer exception here) 
objDetail.folow = sfields[0]; //In case of exception this below code will not be excecuted 

objEntities.AddObject("detail", objDetail); 
// == save at the end == 
objEntities.SaveChanges();