私は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が作成されるときに、ロールと拡張テーブルをシードする必要があります。誰かが私を助けることができるなら、私は本当にそれを感謝します!ありがとう!
はどうもありがとうございまし動作するはずです!ちょっとしたことだと、そのように書かれたコードは大丈夫だと思いますか?私は文脈を破棄しなければならないいくつかの場所では赤くなっているが、ここに必要ならばここには –
があるかどうかわからないので、 'using(var db = new ApplicationDbContext()){// db now now}}' – Shyju