在ApplicationUser类中添加其他字段

时间:2014-02-13 11:07:54

标签: asp.net asp.net-identity

我有一个使用新ASP.NET身份的WebForms应用程序。我在类中添加了几个额外的字段以允许使用Email和一个名为IsOnLine的布尔值。

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

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

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

bool不能为null,因此这是数据库中设置的内容。如果你想让它为null,你需要使用?将它定义为可空的bool?操作

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

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

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

答案 1 :(得分:0)

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

伪代码:

Seed() 
    for each user
        set user IsOnline to false