2014-02-13 71 views
0

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

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

其他信息:'ApplicationUser'上的'IsOnLine'属性不能设置为'null'值。您必须将此属性设置为“System.Boolean”类型的非空值。

网络上的所有exmamples都与MVC有关,我尚未使用它。

我该如何解决这个问题?

回答

1

布尔值不能为空,因此这是数据库中设置的内容。如果你希望它是空的,你将需要将它定义为一个可为空的布尔使用?运营商。

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(); 
+0

确定,以便固定这一点。下一个问题。一旦用户通过身份验证后,如何将bool设置为true? – CSharpNewBee

+0

请看我更新的答案。 –

0

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

伪代码:

Seed() 
    for each user 
     set user IsOnline to false 
相关问题