2016-04-13 17 views
0

Ich habe eine Liste und möchte zwei Felder in einer Tabelle aktualisieren. Die beiden Felder CustOrderNumber und CustomerRefnumber verwenden die CatId , um die Zeile zu identifizieren.Aktualisieren von zwei Feldern in einer Tabelle

Wie kann ich diese beiden Felder basierend auf ihrer ID so aktualisieren, dass sie effizient ist?

ist hier das Modell

  public class Catalog 
      { 
       public Int32 CatId { get; set; } 
       public string Ischecked { get; set; } 
       public string CustOrderNumber { get; set; } 
       public string CustomerRefnumber { get; set; } 
      } 

Hier ist die Methode, die die Sammlung

  public List<Catalog> WriteToDB(List<Catalog> objCat) 
      { 
       DataCollectEntities _objDataCollect = new DataCollectEntities(); 

       foreach(var item in objcat) 
       { 


       } 

      } 
+0

Innerhalb dieser Schleife "var obj = _objDataCollect.Catalog.Where (x => x.CatId == item.CatId) .Single()" und dann dieses "obj" mit neuen Werten wie 'obj.CustOrderNumber 'aktualisieren = item.CustOrderNumber' same für andere Eigenschaft ... Dann draußen Seite loop write '_objDataCollect.SaveChanges()' –

Antwort

0

Sie müssen Griff in den Katalog ‚s aus der db erhalten für diese Elemente auf Ihre Methode übergeben. Aktualisieren Sie den Eigenschaftswert jedes Elements und speichern Sie es zurück.

public List<Catalog> WriteToDB(List<Catalog> objCat) 
{ 
    var ids = objCat.Select(s=>s.CatId); 

    var db = new DataCollectEntities(); 
    var catalogList= db.Catalogs.Where(s=>ids.Contains(s.CatId)).ToList(); 

    foreach(var item in catalogList) 
    { 
     var c= objCat.FirstOrDefault(x=>x.CatId==item.Id); 
     if(c!=null) 
     { 
     item.CustomerRefnumber = c.CustomerRefnumber; 
     item.CustOrderNumber = c.CustOrderNumber ; 
     } 
    } 
    db.SaveChanges(); 
} 

Anzahl der ausgeführten SQL-Abfragen?

select-Anweisung zum Abrufen der Kataloge aus der Datenbank.

N Update-Anweisung (n) für jeden Datensatz zu aktualisieren, wo N ist die Anzahl der Datensätze (Kataloge) Sie

So aktualisieren möchten, wenn Sie 3 Kataloge versuchen, zu aktualisieren, wird dieser Code den db Hit 1 + 3 = 4 mal.

+0

Danke. Willst du sagen, dass das effizienter ist? Ich könnte ungefähr 150 Reihen haben, um zu aktualisieren. Bedeutet das, dass ich die Datenbank 150 mal treffen werde? – user2320476

+0

ObjCat ist die neue Liste, die ich verwenden möchte, um die Datenbank zu aktualisieren – user2320476

+0

Sie können Old School (aber beste Leistung) ADO.NET verwenden, um eine große UPDATE-Anweisung für alle Datensätze auszuführen. Es kann Alimit geben, damit die SQL-Zeichenfolge übergeben wird. Daher müssen Sie möglicherweise Ihre N Datensätze in wenige Chargen aufteilen und ausführen. Der dbContext verfügt über eine 'Database.ExecuteSqlCommand'-Methode, die Sie verwenden können, wenn Sie dies bevorzugen. – Shyju

Verwandte Themen