我使用的是ASP.NET Identity,我在数据库中创建了两个表来扩展它的功能。一个表与AspNetRoles保持多对多的关系,另一个表是该关系的结果。 (我不认为这很重要,但以防万一)
在IdentityConfig.cs中,我有以下代码:
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);
}
}
Inside IndentityModels.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();
}
}
它所说的&#34;错误显示在这里&#34;在代码中我得到Null错误异常。我不知道自己做错了什么,我需要在创建数据库时播种角色和扩展表。如果有人可以帮助我,我会非常感激!谢谢!
答案 0 :(得分:0)
因为context.Extension
是null
,而您的代码试图在Add
上调用导致典型Null引用异常的null
方法。
原因是null是因为你没有将它定义为可设置的属性&amp; gettable。没有set
访问者的属性被视为只读。没有get
访问者的属性被视为只写。在您的情况下,您使您的财产既不可读也不可写!
在您的ApplicationDbContext
课程中,将属性定义更新为包含set
和get
个访问者,并且它应该可以使用
public DbSet<ExtendedIdentity> Extension; { get; set; }