2017-10-19 4 views
0

私はASP.NETアイデンティティを使用しており、データベース内に2つのテーブルを作成して機能を拡張しています。 1つのテーブルはAspNetRolesと多対多の関係を持ち、もう1つはその関係の結果です。C#MVCシードDBが動作しない - NullErrorException

:私は、次のコードを持っている

public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext> 
{ 
    protected override void Seed(ApplicationDbContext context) 
    { 
     IList<ExtendedIdentity> extendedIdentityList = new List<ExtendedIdentity> 
     { 
      new ExtendedIdentity() { Name = "TestName1" }, 
      new ExtendedIdentity() { Name = "TestName2" } 
     }; 

     foreach (var item in extendedIdentityList) 
     { 
      context.Extension.Add(item); //THE ERROR SHOWS UP HERE 
     } 

     base.Seed(context); 
    } 
} 

インサイドIndentityModels.cs:

インサイドIdentityConfig.csは、私は次のコードを持っている(私はこれが重要であると思いますが、念のためはありません)

public class ApplicationRole : IdentityRole 
{ 
    public ApplicationRole() 
    { 
    } 

    public ApplicationRole(string name) 
     : base(name) 
    { 
    } 

    // 

    public virtual ICollection<ExtendedIdentity> Extension{ get; private set; } 
} 

public class ExtendedIdentity 
{ 
    public string Id { get; set; } = Guid.NewGuid().ToString(); 
    public string Name { get; set; } 
    public virtual ICollection<ApplicationRole> Roles { get; private set; } 

} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     :base("LocalTestingDB", throwIfV1Schema: false) 
    { 
     Database.SetInitializer(new ApplicationDbInitializer()); 
    } 

    public DbSet<ExtendedIdentity> Extension; 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<ExtendedIdentity>() 
      .ToTable("Extension") 
      .HasKey(x => x.Id); 

     modelBuilder.Entity<ApplicationRole>() 
      .HasMany<UserPermission>(ar => ar.Extension) 
      .WithMany(ei => ei.Roles) 
      .Map(arei => 
       { 
        arei.MapLeftKey("RoleId"); 
        arei.MapRightKey("ExtensionId"); 
        arei.ToTable("AspNetRoleExtension"); 
       }); 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

コード内の「エラーが表示されます」と表示されている場所では、Nullエラー例外が発生します。私は何が間違っているのかわからない、私は、DBが作成されるときに、ロールと拡張テーブルをシードする必要があります。誰かが私を助けることができるなら、私は本当にそれを感謝します!ありがとう!

答えて

0

context.Extensionnullで、あなたのコードは、典型的なnull参照の例外を発生させているnullAddメソッドを呼び出すようにしようとしているので。

なぜなら、設定可能なプロパティとして定義されていないからです。& gettable。アクセサーなしでsetのプロパティは読み取り専用と見なされます。 getアクセッサのないプロパティは書き込み専用とみなされます。あなたの場合、あなたはあなたの財産を読み書き不可能にしました!あなたのApplicationDbContextクラスで

は、setgetアクセサを持つようにプロパティ定義を更新し、それが

public DbSet<ExtendedIdentity> Extension; { get; set; } 
+0

はどうもありがとうございまし動作するはずです!ちょっとしたことだと、そのように書かれたコードは大丈夫だと思いますか?私は文脈を破棄しなければならないいくつかの場所では赤くなっているが、ここに必要ならばここには –

+0

があるかどうかわからないので、 'using(var db = new ApplicationDbContext()){// db now now}}' – Shyju

関連する問題