LINQ to SQL的使用AttachAll。 DuplicateKeyException [英] Linq To Sql using AttachAll. DuplicateKeyException
问题描述
我搜索网站上的答案,但我一个也没找到。我有以下问题...
我想在数据库中更新多条记录如下:
公共无效SaveJItem(列表< DataForDespatcher> JITEM)
{
JitemsTable.InsertAllOnSubmit(Jitem.Where(I => i.Id == 0));
JitemsTable.AttachAll(Jitem.Where(ⅰ= GT; i.Id = 0)!);
JitemsTable.Context.Refresh(RefreshMode.KeepCurrentValues,JITEM);
JitemsTable.Context.SubmitChanges(); }
该表说明如下:
[表(名称=坦克)]
公共类DataForDespatcher
{
[列(IsPrimaryKey = TRUE,IsDbGenerated = true时,自动同步= AutoSync.OnInsert)
公众诠释标识{搞定;组; }
/ *唧唧歪歪* /
}
当我更新我的错误:
DuplicateKeyException中的JitemsTable.AttachAll(Jitem.Where(ⅰ=> i.Id = 0)!);。
块引用>我如何正确地更新数据?
地址:
剃须刀更新表单:@inherits WebViewPage<&IEnumerable的LT; DomainModel.Entities.DataForDespatcher>>
/ *唧唧歪歪* /数据控制保存(获得):
公开的ViewResult EditForDispatcher(INT组)
{
VAR列表= DataRep.JItems.Where(X => x.group ==组)。选择(X => X);
返回查看(名单);
}数据控制保存(后):
[HttpPost]
公众的ActionResult EditForDispatcher(列表< DataForDespatcher> JITEM,串addNewOperation,串sendParam,字符串操作)
{
如果(ModelState.IsValid)
{
INT组= DataRep.JItems.ToList()最大值(X => x.group + 1)。 如果(Jitem.Any(X =>!x.group = 0))
的foreach(在JITEM VAR dataForDespatcher)
dataForDespatcher.group = Jitem.Where(X => x.group!= 0)。选择(X => x.group)。首先();
其他
的foreach(在JITEM VAR dataForDespatcher)
dataForDespatcher.group =组;
DataRep.SaveJItem(JITEM);
}
返回查看(JITEM);
}
解决方案我的意思是,因为你有两个名单的更新和新的项目,在列表中的第一个未插入项目出现异常。我想,你必须做somethong是这样的:
JitemsTable.InsertAllOnSubmit(Jitem.Where(I => i.Id == 0));
JitemsTable.AttachAll(Jitem.Where(ⅰ= GT; i.Id = 0)!);
JitemsTable.Context.Refresh(RefreshMode.KeepCurrentValues,JITEM);
JitemsTable.Context.SubmitChanges();I searched for the answer on the website but I did not find one. I have the following problem ...
I'm trying to update multiple records in the database as follows:
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(); }
The table is described as follows:
[Table(Name = "tanks")] public class DataForDespatcher { [Column(IsPrimaryKey = true, IsDbGenerated = true,AutoSync = AutoSync.OnInsert)] public int Id { get; set; } /*bla bla bla */ }
When I update I get the error:
"DuplicateKeyException" in "JitemsTable.AttachAll(Jitem.Where(i => i.Id != 0));".
How do I correctly update the data?
ADD: razor update form:
@inherits WebViewPage<IEnumerable<DomainModel.Entities.DataForDespatcher>> /*bla bla bla*/
data controller save(get):
public ViewResult EditForDispatcher(int group) { var list = DataRep.JItems.Where(x => x.group == group).Select(x => x); return View(list); }
data controller save(post):
[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); }
解决方案I mean exception is occur because you have both an updated and new items in List and the first in the list is not inserted item. I think, you must do somethong like this:
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();
这篇关于LINQ to SQL的使用AttachAll。 DuplicateKeyException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!