Linq 尝试使用代码优先迁移为我的数据库设置种子

Linq 尝试使用代码优先迁移为我的数据库设置种子,linq,entity-framework,asp.net-mvc-5,Linq,Entity Framework,Asp.net Mvc 5,我试图使用代码优先迁移MVC5为我的数据库设定种子,我启用了迁移并添加了迁移,但当我更新数据库时,它告诉我,我的对象未设置为对象的实例。有趣的是,当我第二次更新数据库时,它就工作了 这是我的密码: dbcontext: 使用brokermans.Data.Models; 使用Microsoft.AspNet.Identity.EntityFramework; 使用制度; 使用System.Collections.Generic; 使用System.Data.Entity; 使用System.Li

我试图使用代码优先迁移MVC5为我的数据库设定种子,我启用了迁移并添加了迁移,但当我更新数据库时,它告诉我,我的对象未设置为对象的实例。有趣的是,当我第二次更新数据库时,它就工作了

这是我的密码:

dbcontext:
使用brokermans.Data.Models;
使用Microsoft.AspNet.Identity.EntityFramework;
使用制度;
使用System.Collections.Generic;
使用System.Data.Entity;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间brokermans.Data
{
公共类BrokerContext:IdentityDbContext
{
公共事务上下文()
:base(“DefaultConnection”,throwifvv1schema:false)
{
}
公共数据库集项{get;set;}
公共DbSet注释{get;set;}
公共静态BrokerContext创建()
{
返回新的BrokerContext();
}
}
}
配置:
--------------------------------------------------------------------------------
命名空间brokermans.Data.Migrations
{
使用brokermans.Data.Models;
使用Microsoft.AspNet.Identity;
使用Microsoft.AspNet.Identity.EntityFramework;
使用制度;
使用System.Data.Entity;
使用System.Data.Entity.Migrations;
使用System.Linq;
内部密封类配置:DBMigOptionsConfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
}
受保护的覆盖无效种子(BrokerContext上下文)
{
UserStore store=新的UserStore(上下文);
UserManager=新的UserManager(商店);
RoleStore RoleStore=新RoleStore(上下文);
RoleManager RoleManager=新RoleManager(roleStore);
如果(!roleManager.RoleExists(“Admin”))
{
角色管理器。创建(新角色
{
Name=“Admin”
});
}
如果(!roleManager.RoleExists(“用户”))
{
角色管理器。创建(新角色
{
Name=“用户”
});
}
ApplicationUser Chris=manager.FindByName(“Chris”);
if(Chris==null)
{
创建(新应用程序用户)
{
用户名=“克里斯”,
Email=“cgriffin。902@gmail.com",
}, "123456");
}
ApplicationUser Tiff=manager.FindByName(“Tiff”);
如果(Tiff==null)
{
创建(新应用程序用户)
{
UserName=“Tiff”,
Email=“达金_234@yahoo.com"
}, "123456");
}
context.Items.AddOrUpdate(i=>i.Id,
新项目{Id=1,UserId=Chris.Id,Title=“RAMEN”,Pic=“later”,Description=“这很便宜,但还可以”},
新项目{Id=2,UserId=Tiff.Id,Title=“Chicken Ramin”,Pic=“later”,Description=“这比原来的拉面好”},
新项目{Id=3,UserId=Tiff.Id,Title=“牛肉拉明”,Pic=“更晚”,Description=“这比鸡肉拉面好”},
新项目{Id=4,UserId=Chris.Id,Title=“麻辣拉明”,Pic=“稍后”,Description=“这比牛肉拉面好”}
);
context.Comments.AddOrUpdate(c=>c.Id,
新注释{Id=1,ItemId=3,UserComment=“这是来自牛肉上的克里斯”,UserId=chris.Id,DateCreated=DateTime.UtcNow},
新注释{Id=1,ItemId=2,UserComment=“这是来自鸡上的克里斯”,UserId=chris.Id,DateCreated=DateTime.UtcNow},
新注释{Id=1,ItemId=1,UserComment=“这来自拉面上的tiff”,UserId=tiff.Id,DateCreated=DateTime.UtcNow},
新注释{Id=1,ItemId=4,UserComment=“这是来自Spicle上的tiff”,UserId=tiff.Id,DateCreated=DateTime.UtcNow});
}
}
}

您似乎没有将Chris或Tiff变量设置为新创建的变量,并且在稍后阶段尝试使用
Chris.Id
Tiff.Id
,这将导致空引用异常

它还解释了为什么它在第二次运行时工作,因为用户确实存在于第二次运行时

您可以在创建用户后调用
FindByName
来解决这个问题:

        ApplicationUser Chris = manager.FindByName("Chris");
        if (Chris == null)
        {
            manager.Create(new ApplicationUser
            {
                UserName = "Chris",
                Email = "cgriffin.902@gmail.com",
            }, "123456");
            Chris = manager.FindByName("Chris");    //update reference
        }
        ApplicationUser Tiff = manager.FindByName("Tiff");
        if (Tiff == null)
        {
            manager.Create(new ApplicationUser
            {
                UserName = "Tiff",
                Email = "daking_234@yahoo.com"
            }, "123456");
            Tiff = manager.FindByName("Tiff");    //update reference
        }

请以后使用标签;mvc5是一个空标签,应该很快被删除。哇,我真不敢相信我竟然忘了这么做。谢谢你。
        ApplicationUser Chris = manager.FindByName("Chris");
        if (Chris == null)
        {
            manager.Create(new ApplicationUser
            {
                UserName = "Chris",
                Email = "cgriffin.902@gmail.com",
            }, "123456");
            Chris = manager.FindByName("Chris");    //update reference
        }
        ApplicationUser Tiff = manager.FindByName("Tiff");
        if (Tiff == null)
        {
            manager.Create(new ApplicationUser
            {
                UserName = "Tiff",
                Email = "daking_234@yahoo.com"
            }, "123456");
            Tiff = manager.FindByName("Tiff");    //update reference
        }