【问题标题】:column does not allow nulls. INSERT fails error in simple membership mvc5列不允许空值。简单成员 mvc5 中的 INSERT 失败错误
【发布时间】:2014-08-21 13:05:23
【问题描述】:

我的意思是能够使用 SimpleMembership。首先,我在 Global.asax.cs 类中创建了角色。

        Database.SetInitializer<UsersContext>(new InitSecurityDb());
        UsersContext context = new UsersContext();
        context.Database.Initialize(true);
        if (!WebSecurity.Initialized)
            WebSecurity.InitializeDatabaseConnection("DefaultConnection",
                 "UserProfile", "UserId", "UserName", autoCreateTables: true);

        var roles = (SimpleRoleProvider)Roles.Provider;
        var membership = (SimpleMembershipProvider)Membership.Provider;

        if (!roles.RoleExists("Manager"))
        {
            roles.CreateRole("Manager");
        }
        if (!roles.RoleExists("Developer"))
        {
            roles.CreateRole("Developer");
        }

然后我根据用户类型为用户添加了一个角色。如果用户类型是经理,我想将经理角色添加到我的用户。我发布的注册操作:

     public ActionResult Register(RegisterModel model)
    {
        var roles = (SimpleRoleProvider)Roles.Provider;
        var membership = (SimpleMembershipProvider)Membership.Provider;
        if (membership.GetUser(model.UserName, false) == null)
        {
            membership.CreateUserAndAccount(model.UserName, model.Password);
        }

        if(model.status == UserType.Manager)
        {
            if (!roles.GetRolesForUser(model.UserName).Equals("Manager"))
            {
                roles.AddUsersToRoles(new[] { model.UserName }, new[] { "manager" });
            }
        }
        if (model.status == UserType.Developer)
        {
            if (!roles.GetRolesForUser(model.UserName).Equals("Developer"))
            {
                roles.AddUsersToRoles(new[] { model.UserName }, new[] { "developer" });
            }
        }
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { UserName = model.UserName, Password = model.Password, firstName = model.firstName, lastName = model.lastName, Email = model.Email, status = model.status });

                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

在注册操作中的“membership.CreateUserAndAccount(model.UserName, model.Password)”行中我收到以下错误:

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理。 附加信息:无法将值 NULL 插入到列“状态”、表“MyApplication.dbo.UserProfile”中;列不允许空值。插入失败。

我的 userProfile 类

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }

    [Required(ErrorMessage = "Lütfen adınızı giriniz.")]
    public string firstName { get; set; }

    [Required(ErrorMessage = "Lütfen soyadınızı giriniz.")]
    public string lastName { get; set; }


    [DataType(DataType.Password)]
    [Required(ErrorMessage = "Lütfen şifrenizi giriniz...")]

    public string Password { get; set; }

    [Required(ErrorMessage = "Lütfen e-posta adresinizi giriniz.")]
    [DataType(DataType.EmailAddress, ErrorMessage = "Lütfen e-posta adresinizi geçerli bir formatta giriniz.")]

    public string Email { get; set; }

    public UserType status { get; set; }
}

最后是我的注册模型:

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }


    public string firstName { get; set; }


    public string lastName { get; set; }

    public string Email { get; set; }

    public UserType status { get; set; }

}

提前致谢。

【问题讨论】:

    标签: c# asp.net asp.net-mvc simplemembership


    【解决方案1】:

    您应该查看表并确保列状态是可为空的字段。如果它是必填字段,如果您尝试在其中输入空值,您将收到该错误消息。我想将此添加为评论,但我没有足够的权限添加评论。

    【讨论】:

    • 在我的注册操作中,用户已经创建了 2 次使用 members.CreateUserAndAccount(model.UserName, model.Password);和 WebSecurity.CreateUserAndAccount(model.UserName, model.Password,...)。也许是因为这个原因,我得到了很多错误。我删除了其中一个,还实施了您的解决方案。谢谢。
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2021-06-17
    • 1970-01-01
    • 2016-03-05
    • 2011-07-14
    相关资源
    最近更新 更多