2012-11-11 48 views
1

我在網站上搜索了答案,但是我沒有找到答案。我有以下問題......Linq To Sql使用AttachAll。 DuplicateKeyException

我想在數據庫中更新多個記錄如下:

public void SaveJItem(List<DataForDespatcher> Jitem) 
     { 
      JitemsTable.InsertAllOnSubmit(Jitem.Where(i => i.Id ==0)); 
JitemsTable.AttachAll(Jitem.Where(i => i.Id != 0)); 
JitemsTable.Context.Refresh(RefreshMode.KeepCurrentValues, Jitem); 
JitemsTable.Context.SubmitChanges(); 

     } 

表描述如下:

[Table(Name = "tanks")] 
    public class DataForDespatcher 
    { 
     [Column(IsPrimaryKey = true, IsDbGenerated = true,AutoSync = AutoSync.OnInsert)] 
     public int Id { get; set; } 
    /*bla bla bla */ 
} 

當我更新我收到錯誤:

"DuplicateKeyException" in "JitemsTable.AttachAll(Jitem.Where(i => i.Id != 0));".

如何正確更新數據?

地址: 剃鬚刀更新形式:

@inherits WebViewPage<IEnumerable<DomainModel.Entities.DataForDespatcher>> 
/*bla bla bla*/ 

數據控制器保存(獲得):

public ViewResult EditForDispatcher(int group) 
     { 
      var list = DataRep.JItems.Where(x => x.group == group).Select(x => x); 
      return View(list); 
     } 

數據控制器保存(後):

[HttpPost] 
     public ActionResult EditForDispatcher(List<DataForDespatcher> Jitem, string addNewOperation, string sendParam, string operations) 
     { 
       if (ModelState.IsValid) 
       { 
int group = DataRep.JItems.ToList().Max(x => x.group + 1); 

        if (Jitem.Any(x => x.group != 0)) 
         foreach (var dataForDespatcher in Jitem) 
          dataForDespatcher.group = Jitem.Where(x=>x.group!=0).Select(x=>x.group).First(); 
        else 
         foreach (var dataForDespatcher in Jitem) 
          dataForDespatcher.group = group; 
        DataRep.SaveJItem(Jitem); 
       } 
     return View(Jitem); 
    } 

回答

0

我的意思是例外因爲您在列表中有一個已更新和新的項目,並且列表中的第一個未插入項目。我認爲,你必須做somethong這樣的:

JitemsTable.InsertAllOnSubmit(Jitem.Where(i => i.Id ==0)); 
    JitemsTable.AttachAll(Jitem.Where(i => i.Id != 0)); 
    JitemsTable.Context.Refresh(RefreshMode.KeepCurrentValues, Jitem); 
    JitemsTable.Context.SubmitChanges(); 
+0

我沒有看到你已經改變,依然保持如我...... HTTP://pixs.ru/showimage/Snimokekra_7790459_6293546.png –

+0

我不(jitem.Select(x => x.Id).First()== 0) JitemsTable.InsertAllOnSubmit(Jitem);'似乎是錯誤的,因爲Jitem可以同時添加和更新項目和Jitem.Select(x => x.Id).First()可以返回不是更新的項目ID。 –

+0

那麼你不會幫助我? =( –