【发布时间】:2017-04-17 10:11:20
【问题描述】:
我有一个 asp 网络项目,我尝试将多个记录插入到我的基础中。
我的想法是更新记录,并使用更新的参数复制这些记录。
但我的记录只更新,我不明白如何进行多重插入(我不想进行 foreach 并按 1 条记录插入/更新)。
我如何更新记录以及之后插入此记录的副本并更改 1 个参数?
我的代码:
public void SAVE(List<int> list,int stat )
{
var all = context.ReqForDoc.ToList();
var friends = context.ReqForDoc.Where(f => list.Contains(f.requestN)).ToList();
friends.ForEach(a => // UPDATE WORK
{
a.actual = 0;
a.ReqStatus = stat;
a.ChangeDate = DateTime.Now;
});
all.AddRange(friends); // INSERT NOW WORK
context.SaveChanges();
}
【问题讨论】:
-
EF 更改跟踪器使用引用相等。因此,您必须创建 new 对象并手动复制/更新原始对象的属性,然后将它们添加到相应的
DbSet,而不是像当前那样添加到 local list . -
@IvanStoev 抱歉,但是我如何将它们添加到我的数据库中,Addrange 在这种情况下也不起作用: List
list2 = new List (); list2 = context.ReqForDoc.Where(f => list.Contains(f.requestN)).ToList(); context.ReqForDoc.AddRange(list2); context.SaveChanges(); -
我不能确切地说,因为我没有你的模型,但它应该是这样的(你似乎错过了评论的 new 部分)@ 987654323@。如果是身份,请不要在选择中包含 PK。
-
@IvanStoev,我找到了解决方案,你对新对象的想法很棒,谢谢!
标签: c# asp.net sql-server entity-framework linq