2017-06-19 3 views
0

Ich benutze Entity Framework mit einer MVC5-Anwendung und derzeit versuche ich einige Formulardaten zu speichern, die mehrere Tabellen in meiner Datenbank berührt. Wenn ich Daten zu den Tabellen hinzufüge, scheint es gut zu funktionieren, aber sobald ich die Bridge-Tabellen treffe, bekomme ich eine Null-Ref-Ausnahme, die für mich keinen Sinn ergibt.Entity Framework Null Referenz Ausnahme beim Hinzufügen zu Bridge-Tabellen

Ich bin neu in der Programmierung, so würde jede Hilfe sehr geschätzt werden.

public void RegisterNewUser(IDCRegisterViewModel model) 
    { 
     // 
     string fullAddress = model.AddressLine1 + "\n" + model.AddressLine2 + (string.IsNullOrEmpty(model.AddressLine2) ? "" : "\n") + model.City + ", " + model.State + " " + model.Zip + "\n" + model.Country; 
     using (var AuthContext = new InfoKeeperEntities1()) 
     { 
      AuthContext.Locations.Add(new Location { 
       Line1 = model.AddressLine1, 
       Line2 = model.AddressLine2, 
       City = model.City, 
       State = model.State, 
       Zip = model.Zip, 
       Country = model.Country, 
       UserID = model.UserID, 
       FullAddr = fullAddress 
      }); 

      AuthContext.ProfileDatas.Add(new ProfileData 
      { 
       UserID = model.UserID, 
       UACC = model.UACC, 
       isRecCenter = model.IsRecCenter, 
       isCustAdmin = model.IsCustAdmin 
      }); 

      //Add to bridge tables for user/dept and group/dept 
      List<Department> deptList = new List<Department>(); 
      foreach (var ID in model.GroupIDs) 
      { 
       deptList.Add(AuthContext.Departments.FirstOrDefault(x => x.ID == ID)); 
      } 

      foreach (var department in deptList) 
      { 
       //NULL REF EXCEPTION HERE 
       AuthContext.AspNetUsers.FirstOrDefault(x => x.Id == model.UserID).Departments.Add(department); 

       foreach (var groupID in model.GroupIDs) 
       { 
        AuthContext.Groups.FirstOrDefault(x => x.ID == groupID).Departments.Add(department); 
       } 
      } 
     } 
    } 
+0

Bitte geben Sie an, welche Linie wirft die Null Referenz Ausnahme. – mjw

+0

Aktualisiert. Vielen Dank. – SentOnLine

+0

Setzen Sie einen Haltepunkt in Ihrem Code in der Zeile, in der Sie den NULL REF haben, und markieren Sie diesen Teil der Zeile AuthContext.AspNetUsers.FirstOrDefault (x => x.Id == model.UserID), wenn er den Haltepunkt erreicht Klicken Sie auf und wählen Sie Quick Watch, um zu sehen, ob diese LINQ-Anweisung irgendetwas zurückgibt. – mjw

Antwort

1

Wenn Sie die LazyLoadingEnabled und ProxyCreationEnabled deaktivieren Sie immer mit einem Fehler konfrontiert wegen der Verwendung von Department nach FirstorDefault Query und EntityFramework es nicht sind für AppUsers, Sie haben das gleiche Problem mit dem Hinzufügen der Abteilung für den Konzern . Sie müssen also zuerst die Abteilung für beide einschließen.

setzen Sie using System.Data.Entity; in den ersten der Codes.

public void RegisterNewUser(IDCRegisterViewModel model) 
{ 
    string fullAddress = model.AddressLine1 + "\n" + model.AddressLine2 + (string.IsNullOrEmpty(model.AddressLine2) ? "" : "\n") + model.City + ", " + model.State + " " + model.Zip + "\n" + model.Country; 
    using (var AuthContext = new InfoKeeperEntities1()) 
    { 
     AuthContext.Locations.Add(new Location { 
      Line1 = model.AddressLine1, 
      Line2 = model.AddressLine2, 
      City = model.City, 
      State = model.State, 
      Zip = model.Zip, 
      Country = model.Country, 
      UserID = model.UserID, 
      FullAddr = fullAddress 
     }); 

     AuthContext.ProfileDatas.Add(new ProfileData 
     { 
      UserID = model.UserID, 
      UACC = model.UACC, 
      isRecCenter = model.IsRecCenter, 
      isCustAdmin = model.IsCustAdmin 
     }); 

     //Add to bridge tables for user/dept and group/dept 
     List<Department> deptList = new List<Department>(); 
     foreach (var ID in model.GroupIDs) 
     { 
      deptList.Add(AuthContext.Departments.FirstOrDefault(x => x.ID == ID)); 
     } 
     var user = AuthContext.AspNetUsers.Include("Departments").FirstOrDefault(x => x.Id == model.UserID);   
     foreach (var department in deptList) 
     { 
      user.Departments.Add(department); 

      foreach (var groupID in model.GroupIDs) 
      { 
       var group = AuthContext.Groups.Include("Departments").FirstOrDefault(x => x.ID == groupID); 
       group.Departments.Add(department); 
      } 
     } 
    } 
} 

Tipp: die diese Erklärung Code ändern Vergessen Sie nicht, eine neue Instanz von List<Depatment> im Konstruktor von AspNetUsers und Groups zu machen:

public class ApplicationUser 
{ 
    Public ApplicationUser() 
    { 
     this.Departments = new List<Department>(); 
    } 
} 
public class Group 
{ 
    Public Group() 
    { 
     this.Departments = new List<Department>(); 
    } 
} 
+0

@SentOnLine möchten Sie es betrachten? Ich habe aktualisiert! –

Verwandte Themen