配置文件种子方法中的NullReferenceException
本文关键字:NullReferenceException 子方法 种子 配置文件 | 更新日期: 2023-09-27 18:01:38
我不确定为什么我的Seed方法抛出异常。
下面是我的代码://Roles
var roles = new List<Role>
{
new Role {RoleName = "Admin"},
new Role {RoleName = "SuperAdmin"}
};
roles.ForEach(s => context.Roles.AddOrUpdate(p => p.RoleName, s));
context.SaveChanges();
//Adds the 2 superadmins from AD to DB
Credentials.GetUserByUsername(context, "credentials1");
Credentials.GetUserByUsername(context, "credentials2");
context.SaveChanges();
//Add the superadmins to a List
var superAdmins = new List<User>();
User admin1 = context.Users.Where(p => p.Username == "credentials1").FirstOrDefault();
User admin2 = context.Users.Where(p => p.Username == "crendetials2").FirstOrDefault();
superAdmins.Add(admin1);
superAdmins.Add(admin2);
//Find the SuperAdmin role in DB
Role superAdminRole = context.Roles.Where(p => p.RoleName == "SuperAdmin").FirstOrDefault();
//Add the role to each user
foreach (User user in superAdmins)
{
if (user != null)
{
superAdminRole.Users.Add(user); <---- This is throwing the exception
context.SaveChanges();
}
}
superAdminRole.Users.Add(user)抛出异常。我可以看到调试时,用户和角色都找到了,所以我不确定为什么我得到异常。
现在做这个手术是不是太早了?因为用户和角色都在数据库中,所以我假设我的上下文此时能够处理此操作。
最后一个细节:如果我在此时停止调试并第二次运行应用程序,我不会得到异常,并且角色被正确分配。我希望避免运行两次Seed方法。
替换下面的语句
superAdminRole.Users.Add(user);
user.Role = superAdminRole;
也将context.SaveChanges()
从foreach
环中取出