2014-02-13 3 views
0

У меня есть приложение WebForms, использующее новую идентификацию ASP.NET. Я добавил несколько дополнительных полей в классе, чтобы разрешить электронную почту и логическое имя IsOnLine.Добавление дополнительных полей в класс ApplicationUser

Я использую миграции, чтобы явно обновлять таблицы и видеть, что мои новые поля есть. Однако всякий раз, когда я пытаюсь войти в систему, я получаю следующую ошибку:

Дополнительная информация: Свойство IsOnLine на 'ApplicationUser' не может быть установлено в значение 'null'. Вы должны установить это свойство в ненулевое значение типа «System.Boolean».

Все примеры в сети относятся к MVC, которые я еще не использую.

Как я могу это исправить?

ответ

1

bool не может быть нулевым, так что это то, что установлено в базе данных. Если вы хотите, чтобы он был нулевым, вам нужно определить его как nullable 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(); 
+0

Хорошо, таким образом, что зафиксировано, что. Следующий вопрос. Как установить bool как истину после аутентификации пользователя? – CSharpNewBee

+0

См. Мой обновленный ответ. –

0

Я предпочитаю, чтобы избежать нулевых значений, когда это возможно, чтобы определить, является ли свойство может принимать аннулирует ЗНАЧЕНИЯ лучше думать, что эта информация представляет в задаче домена. В этом случае я считаю, что не имеет смысла иметь неопределенное значение для IsOnline, потому что пользователь находится в режиме онлайн или офлайн, а не средние условия применимы к этому факту. Чтобы устранить эту проблему с базой данных, воспользовавшись тем, что вы используете «Перемещение кода», вы можете использовать метод «Семя» из класса «Конфигурация» и определить значения (-и) для своих новых полей, которые не могут быть обнулены.

Псевдо код:

Seed() 
    for each user 
     set user IsOnline to false 
Смежные вопросы