【问题标题】:Adding additional fields in ApplicationUser class在 ApplicationUser 类中添加其他字段
【发布时间】:2014-02-14 02:20:25
【问题描述】:

我有一个使用新的 ASP.NET 标识的 WebForms 应用程序。我在类中添加了几个附加字段以允许电子邮件和一个名为 IsOnLine 的布尔值。

我使用迁移来明确更新表,并且可以看到我的新字段在那里。但是,每当我现在尝试登录时,都会出现以下错误:

附加信息:“ApplicationUser”上的“IsOnLine”属性无法设置为“null”值。您必须将此属性设置为“System.Boolean”类型的非空值。

网上所有的例子都与MVC有关,我还没用。

我该如何解决这个问题?

【问题讨论】:

    标签: asp.net asp.net-identity


    【解决方案1】:

    bool 不能为 null,因此这是在数据库中设置的值。如果您希望它为空,则需要使用 ? 将其定义为可为空的布尔值。运算符。

    public class ApplicationUser : IdentityUser
    {
        public bool? IsOnline { get; set; }
    }
    

    要更新数据库中的这些信息,请查看adding email confirmation to ASP.NET Identity 上的这篇文章。在此示例中,有一个布尔标志 IsConfirmed 在注册过程中更新,它类似于您的 IsOnline 标志。这是更新数据库的相关代码的sn-p。

        user.IsOnline = true;
        DbSet<ApplicationUser> dbSet = context.Set<ApplicationUser>();
        dbSet.Attach(user);
        context.Entry(user).State = EntityState.Modified;
        context.SaveChanges();
    

    【讨论】:

    • 好的,这样就解决了。下一个问题。用户通过身份验证后,如何将 bool 设置为 true?
    【解决方案2】:

    我更喜欢尽可能避免使用空值,为了确定一个属性是否可以接受空值,最好考虑一下该信息在域问题中代表什么。在这种情况下,我认为 IsOnline 具有未确定的值是没有意义的,因为用户在线或离线,而不是中间条款适用于这一事实。 要解决数据库的这个问题,利用您正在使用代码迁移的优势,您可以使用 Configuration 类中的 Seed 方法并将值分配给不可为空的新字段。

    伪代码:

    Seed() 
        for each user
            set user IsOnline to false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多