LINQ to SQL的使用AttachAll。 DuplicateKeyException [英] Linq To Sql using AttachAll. DuplicateKeyException

查看:103
本文介绍了LINQ to SQL的使用AttachAll。 DuplicateKeyException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我搜索网站上的答案,但我一个也没找到。我有以下问题...

我想在数据库中更新多条记录如下:

 公共无效SaveJItem(列表< D​​ataForDespatcher> 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; D​​omainModel.Entities.DataForDespatcher>>
/ *唧唧歪歪* /

数据控制保存(获得):

 公开的ViewResult EditForDispatcher(INT组)
        {
            VAR列表= DataRep.JItems.Where(X => x.group ==组)。选择(X => X);
            返回查看(名单);
        }

数据控制保存(后):

  [HttpPost]
        公众的ActionResult EditForDispatcher(列表< D​​ataForDespatcher> 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆