1

ウェブサイトで答えを検索しましたが、見つかりませんでした。私は次の問題を抱えています...

次のように、データベース内の複数のレコードを更新しようとしています。

  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 */
}

更新すると、次のエラーが発生します。

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

データを正しく更新するにはどうすればよいですか?

追加:かみそり更新フォーム:

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

データコントローラーsave(get):

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

データコントローラー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);
    }
4

1 に答える 1

0

リストに更新されたアイテムと新しいアイテムの両方があり、リストの最初のアイテムが挿入されていないため、例外が発生します。私は、あなたはこのようなことをしなければならないと思います:

    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(); 
于 2012-11-11T11:42:50.077 に答える