2017-04-17 65 views
0

我有一個ASP .Net網絡項目,我嘗試將多重記錄到我的基地乘的項目。
我的想法是更新記錄,並使用更新的參數複製這些記錄。
但我的記錄只更新,我不明白如何使乘法插入(我不想讓foreach和插入/更新1記錄)。
我怎樣才能使1個更改的參數Records唱片公司和這個到插入件副本後更新?如何插入與實體框架和LINQ

我的代碼:

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(); 
     } 
+2

EF變化跟蹤器使用引用相等。因此,您必須創建** new **對象,並手動複製/更新原始屬性,然後像當前那樣將它們添加到相應的'DbSet',而不是* local list *。 –

+0

@IvanStoev很抱歉,但我怎樣才能將它們添加到我的數據庫,沒有的AddRange在這種情況下,工作太: 列表列表2 =新名單(); list2 = context.ReqForDoc.Where(f => list.Contains(f.requestN))。ToList(); context.ReqForDoc.AddRange(list2); context.SaveChanges(); –

+0

我不能告訴正是因爲我沒有你的模型,但它應該是這樣的(你似乎錯過了** **新註釋的一部分)'context.ReqForDoc.AddRange(friends.Select( f => new ReqForDocType {Prop1 = f.Prop1,Prop2 = f.Prop2,...}))'。只要不包括PK在選擇,如果它的身份。 –

回答

0

我找到了解決辦法。謝謝@ 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(); }