2014-02-13 108 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 
相關問題