2017-06-19 15 views
0

MVC5アプリケーションでEntity Frameworkを使用していますが、現在、データベースの複数のテーブルにアクセスするフォームデータを保存しようとしています。私はテーブルにデータを追加するときにうまくいくように見えますが、ブリッジテーブルにヒットしたら、null ref例外が発生しています。ブリッジテーブルに追加する際のEntity Frameworkヌル参照例外

私はプログラミングに慣れていないので、どんな助けでも大歓迎です。 Departmentを使用した後FirstorDefaultクエリとEntityFrameworkはAppUsersのためにそれが含まれていないので、あなたが常にエラーに直面するオフあなたはLazyLoadingEnabledProxyCreationEnabledを有効にした場合

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

ヌルを投げされている行を示してください:AspNetUsersGroupsのコンストラクタでList<Depatment>の新しいインスタンスを作成することを忘れないでください参照例外。 – mjw

+0

更新されました。ありがとうございました。 – SentOnLine

+0

NULL REFがある行のコードにブレークポイントを置き、ブレークポイントに達すると、この行を強調表示します。AuthContext.AspNetUsers.FirstOrDefault(x => x.Id == model.UserID)、右クリックしてクイックウォッチを選択して、このLINQ文が何かを返すかどうかを確認します。 – mjw

答えて

1

、あなたはグループにするにはカテゴリーを追加することと同じ問題を抱えています。だから、あなたは両者のために最初に部署を含める必要があります。

using System.Data.Entity;を最初のコードに入れてください。これにコードステートメントを変更 :

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); 
      } 
     } 
    } 
} 

ヒント:

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

@SentOnLineあなたはそれを検討しますか?私は更新しました! –

関連する問題