Значения по умолчанию SQLite для логического столбца, не работают должным образом

У меня есть одна SQLite таблица со следующей сущностью:

[Table ("employee")]
public class Employees
{
    [Column ("employee_id")]
    [PrimaryKey]
    public int EmployeeId { get; set; }

    [Column ("username")]
    public string UserName { get; set; }

    [Column ("password")]
    public string Password { get; set; }

    [Column ("first_name")]
    public string FirstName { get; set; }

    [Column ("last_name")]
    public string LastName { get; set; }

    [Column ("is_wah_allowed")] //Newly added Column
    public bool IsWAHAllowed { get; set; }  
}

Когда приложение запускается, я создаю таблицу.

conn.CreateTable<Employees>();

Я хочу добавить новый логический столбец со значением по умолчанию, равным 0 - false в SQLite, поскольку он хранит bool как 0 или 1.

Я пробовал следующие способы:

Случай 1:

[Column ("is_wah_allowed")] //Newly added Column

Вывод: это показывает Null в браузере БД для SQLite

Случай 2:

[Column ("is_wah_allowed"), Default (false)] //Newly added Column

Вывод: это вызывает исключение в conn.CreateTable (); - Невозможно преобразовать из bool в int.

Случай 3:

[Column ("is_wah_allowed"), Default (value : 0)] //Newly added Column

Вывод: в браузере БД для SQLite отображаются ложные значения вместо 0. Когда сервер возвращает мне данные, я сохраняю / обновляю их, а затем он показывает их как 0 или 1 в обновленных строках, потому что сервер обрабатывает это как целочисленные значения.

Я хочу знать :

Случай 1: Почему он показывает Null вместо значения по умолчанию 0?

Случай 2: Почему возникает исключение?

Случай 3: Почему вместо 0 отображается False?

Заранее спасибо!!


person MilanG    schedule 30.07.2018    source источник


Ответы (1)


В SQLite нет boolean. Вместо этого вы храните значение boolean в базе данных как int в SQLite. Вы можете использовать следующие значения: 0 для ложных и 1 для истинных. Когда вы идете и выбираете int из базы данных. Согласно 0 и 1 вы можете исправить свой if else блок.

Изменить 1

Boolean Datatype SQLite не имеет отдельного логического класса хранения. Вместо этого логические значения сохраняются как целые числа 0 (ложь) и 1 (истина).

типы данных SQLite

Для получения дополнительной информации посетите это

person R15    schedule 30.07.2018
comment
Разве нет способа сохранить логический тип свойства Entity и при этом сохранить значения 0, 1 в SQLite? потому что я не хочу преобразовывать этот тип в целое число. - person MilanG; 31.07.2018
comment
Фактически! Вы используете bool только при создании таблиц, но он принимает / извлекает значение только как 0 или 1. См. Мой обновленный ответ. - person R15; 31.07.2018