2016-07-20 8 views
1

Ich benutze asp.net mvc 4 und entity framework 6, um eine Website zu machen, wo ich Daten in MSSQL db speichern kann. Ich möchte eine Funktion machen, wo es eine Kopie eines Eintrags mit einer anderen ID erstellt. Ich möchte diese kopierten Werte in ein Array einfügen und an das Modell übertragen, um die Back-End-Verarbeitung zu beschleunigen. Aber ich bin nicht sicher, wie es geht. Hier sind meine Codes,Verwenden Sie Array, um einen neuen Eintrag im Modell in asp.net hinzuzufügen. Mvc

public ActionResult FlatCopy(FlManagement FlTable, int FlId = 0) 
    { 
     var getOwner = rentdb.OwnerRegs.Where(a => a.username == User.Identity.Name).FirstOrDefault(); 
     var getId = getOwner.serial; 
     var getLimit = getOwner.limit; 
     var getPosted = getOwner.posted; 

     FlInfo model = FlTable.Flats; 
     if (ModelState.IsValid) 
     { 
      if (getLimit != 0) 
      { 
       try 
       { 
        getOwner.limit = getLimit - 1; 
        getOwner.posted = getPosted + 1; 
        var dbPost = rentdb.FlatInfoes.Where(p => p.serial == FlId).FirstOrDefault(); 
        if (dbPost == null) 
        { 
         TempData["flat_edit_fail"] = "Error! Information update failed!"; 
         return RedirectToAction("FlatManager", new { FlPanelId = "AllFl" }); 
        } 
        model.flatno = "Copy of " + dbPost.flatno; 
        model.type = dbPost.type; 
        model.owner_id = getId; 
        model.t_id = 0; 
        model.t_name = "N/A"; 
        model.t_phone = "N/A"; 
        model.basic = dbPost.basic; 
        model.electric = dbPost.electric; 
        model.gas = dbPost.gas; 
        model.water = dbPost.water; 
        model.total = dbPost.total; 
        model.advancerent = dbPost.advancerent; 
        model.currency = dbPost.currency; 
        model.title = dbPost.title; 
        model.status = "N/A"; 
        db.FlatInfoes.Add(model); 
        db.SaveChanges(); 

        TempData["success"] = "Information Added Successfully!"; 
        return RedirectToAction("FlManager", new { FlPanelId = "AllFl" }); 
       } 
       catch 
       { 
        TempData["fail"] = "Error! Please Provide Valid Information."; 
        return RedirectToAction("FlManager", new { FlPanelId = "AllFl" }); 
       } 
      } 
      else 
      { 
       TempData["fail"] = "You've reached your post limit!"; 
       return RedirectToAction("FlManager", new { FlPanelId = "AllFl" }); 
      } 
     } 
     else 
     { 
      TempData["fail"] = "Error! Please Provide Valid Information."; 
      return RedirectToAction("FlManager", new { FlPanelId = "AllFl" }); 
     } 
    } 

Wie kann ich die Werte in einem Array setzen und drücken Sie das Array in Modell einen neuen Eintrag hinzufügen? Brauche diese Hilfe dringend! Vielen Dank.

Antwort

1

Sie können die Entität vom DbContext trennen und dann zur EntityCollection hinzufügen.

rentdb.Entry(dbPost).State = EntityState.Detached; 
rentdb.FlatInfoes.Add(dbPost); 

Lösung 2: (besser)

var model = new FlInfo(); 
rentdb.FlatInfoes.Add(model); 
var sourceValues = rentdb.Entry(dbPost).CurrentValues; 
rentdb.Entry(model).CurrentValues.SetValues(sourceValues); 
rentdb.SaveChanges(); 
+0

Wird die Originalkopie entfernt werden oder es wird bleiben, wie es ist? –

+0

original dbPost bleiben, und ein neuer Beitrag hinzugefügt, um db mit neuer Identität –

+0

Hallo, vielen Dank für Ihren Vorschlag. Ich habe Ihre Lösungen versucht, aber es scheint, dass ich jedes Mal Fehler erhalte, wenn ich versuche, eine Kopie zu machen, da die 'ID' jedes Datensatzes 'automatisch inkrementiert' in DB ist. Irgendeine Idee wie ich das beheben kann? –

Verwandte Themen