C#MVC种子数据库无法正常工作 - NullErrorException

时间:2017-10-19 13:19:09

标签: c# asp.net asp.net-mvc database dbcontext

我使用的是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错误异常。我不知道自己做错了什么,我需要在创建数据库时播种角色和扩展表。如果有人可以帮助我,我会非常感激!谢谢!

1 个答案:

答案 0 :(得分:0)

因为context.Extensionnull,而您的代码试图在Add上调用导致典型Null引用异常的null方法。

原因是null是因为你没有将它定义为可设置的属性&amp; gettable。没有set访问者的属性被视为只读。没有get访问者的属性被视为只写。在您的情况下,您使您的财产既不可读也不可写!

在您的ApplicationDbContext课程中,将属性定义更新为包含setget个访问者,并且它应该可以使用

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