gpt4 book ai didi

c# - 使用 linq to sql 将列表附加到数据库

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:01 35 4
gpt4 key购买 nike

我的问题是我正在尝试附加 List<>到数据库中的一个表中。此 List<> 中的某些项目包含一个主键 - 这些项目应被视为对数据库的更新。有些项目没有主键 - 这些项目应该插入到数据库中。

我试过了

  Context.myTable.AttachAll(myList, true);
Context.myTable.AttachAll(myList, false);
Context.myTable.AttachAll(myList);

全部都不行。那么我会做类似的事情:

 var listFromDb =  Context.myTable.Where(x => myListOfIds.contains(x.primaryKey));
foreach (var obj in myList)
{
if(obj.primaryKey > 0)
{
Context.myTable.Attach(obj, listFromDb.FirstOrDefault(x => x.primaryKey == obj.primaryKey);
}
else{
Context.myTable.InsertOnSubmit(obj);
}
Context.SubmitChanges();
}

必须有一种更简单的方法,然后遍历列表中的每个项目并手动决定是否附加或插入天气。我在这里缺少什么吗?

编辑

我在将近 2 年前发现了同样的问题 - Linq To Sql using AttachAll. DuplicateKeyException ,其中的答案基本上就是我的解决方案。有了新的 Entities 6,以及过去 2 年添加的所有新东西,现在有办法做我想做的事吗?

最佳答案

我不知道是否有更好的解决方案,但我认为这会很好:

foreach(var item in myList)
{
if(item.Id > 0)
context.Entry(item).State = EntityState.Modified;
else
context.Table.Add(item);
}

通过这种方式,您不需要从数据库中获取所有旧项目。

关于c# - 使用 linq to sql 将列表附加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479800/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com