配置文件种子方法中的NullReferenceException

时间:2014-05-05 12:08:15

标签: c# asp.net-mvc entity-framework nullreferenceexception

我不确定为什么我的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方法。

1 个答案:

答案 0 :(得分:0)

替换以下声明

superAdminRole.Users.Add(user);

user.Role = superAdminRole;

也可以从context.SaveChanges()循环中取出foreach