我有一个使用新ASP.NET身份的WebForms应用程序。我在类中添加了几个额外的字段以允许使用Email和一个名为IsOnLine的布尔值。
我使用迁移来显式更新表,并且可以看到我的新字段在那里。但是,每当我尝试登录时,我都会收到以下错误:
附加信息:'ApplicationUser'上的'IsOnLine'属性无法设置为'null'值。必须将此属性设置为类型为“System.Boolean”的非空值。
网上的所有例子都与MVC有关,我还没有使用它。
我该如何解决这个问题?
答案 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