配置文件种子方法中的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方法。

配置文件种子方法中的NullReferenceException

替换下面的语句

superAdminRole.Users.Add(user);

user.Role = superAdminRole;

也将context.SaveChanges()foreach环中取出