2016-06-19 4 views
0

Ich habe ein Modell Patienten, die 0 oder mehr Adressen verknüpft haben können.MVC Http Post Einstellung von Werten in Entity Framework

Ich möchte nur eine primäre Adresse, also auf meinem Beitrag bearbeiten/erstellen Ich möchte alle anderen Werte von 'IsPrimaryAddress' auf falsch setzen.

Ich habe den folgenden Code geschrieben.

// POST: /Roles/Create 
    [HttpPost] 
    public ActionResult Edit(Address address) 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      //if address is primary, make all others not 
      if (address.IsPrimaryAddress) 
      { 
       var addresses = context.Addresses.Where(x => x.IsPrimaryAddress == true && x.AddressId != address.AddressId); 
       foreach (var item in addresses) 
       { 
        item.IsPrimaryAddress = false; 
        item.UpdatedBy = -1; 
        item.UpdatedDate = DateTime.Now; 
       } 
      } 

      address.PatientId = Id; 
      address.UpdatedBy = -1; 
      address.UpdatedDate = DateTime.Now; 

      context.Entry(address).State = EntityState.Modified; 
      context.SaveChanges(); 

      return RedirectToAction("View", "Patient", new { @id = Id }); 
     } 
    } 

Jedoch habe ich die folgende Fehlermeldung bin immer:

eine Einheit des Typs ‚WaysToWellness.Address‘ Anbringen schlug fehl, da eine andere Einheit des gleichen Typs bereits den gleichen Primärschlüssel Wert hat.

Kann jemand erklären, warum ich das nicht tun kann und warum es einen Fehler gibt?

Antwort

0

Ich denke, ich habe das Problem gefunden.

Ich denke, es war, weil ich versuchte, die gleiche Adresszeile zweimal zu setzen, einmal in der Schleife und dann noch einmal unten.

Im Folgenden wurde das Problem behoben.

[HttpPost] 
    public ActionResult Edit(Address address) 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      //if address is primary, make all others not 
      if (address.IsPrimaryAddress) 
      { 
       var addresses = context.Addresses.Where(x => x.IsPrimaryAddress == true && x.AddressId != address.AddressId); 
       foreach (var item in addresses) 
       { 
        item.IsPrimaryAddress = false; 
        item.UpdatedBy = -1; 
        item.UpdatedDate = DateTime.Now; 
       } 
      } 

      address.UpdatedBy = -1; 
      address.UpdatedDate = DateTime.Now; 

      context.Entry(address).State = EntityState.Modified; 
      context.SaveChanges(); 

      return RedirectToAction("View", "Patient", new { @id = address.PatientId }); 
     } 
    } 
+0

Sie haben vergessen 'x.PatientId == Id' Zustand Ihre where-Klausel – dotctor

+0

Leider habe ich etwas die Methode übergeben, um nicht in den Patienten-ID geändert hatte hinzuzufügen, da dies nicht nötig war, ich habe Update der ursprüngliche Beitrag – user3284707