【问题标题】:How to insert multiply items with entity framework and linq如何使用实体框架和 linq 插入多个项目
【发布时间】: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


【解决方案1】:

我找到了解决方案。感谢@Ivan Stoev 的解决方案。我创建新对象并使用 AddRange 插入新行。

public void SAVE(List<int> list )

        {  
var all = context.ReqForDoc.ToList();
                var friends = context.ReqForDoc.Where(f => list.Contains(f.requestN)).ToList();
                friends.ForEach(a =>
                {
                    a.actual = 0;
                });

                 context.SaveChanges(); // UPDATE RECORDS

               List<ReqInf> list2 = new List<ReqInf>(); 
                list2 = context.ReqForDoc.Where(f => list.Contains(f.requestN)).ToList();
                context.ReqForDoc.AddRange(list2); //INSERT NEW
                list2.ForEach(a =>
                {
                    a.actual = 1;
                    if (a.Status == 3) { a.Status = 92; }



                });   //UPDATE INSERTED
                context.SaveChanges(); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多