Установить свойство модели в boolean в Entity Framework

Я только немного узнаю об инфраструктуре сущности и не имею большого опыта работы с ORM.

В моем маленьком приложении у меня есть одна таблица, эта таблица сервера sql имеет несколько столбцов, включая PrimaryKey (int) имя (строка) и флаг (tinyint).

Когда я импортировал эту таблицу в нее, автоматически присваивался тип данных Flags в виде байта. Это прекрасно, но флаг действительно должен быть логическим, поэтому я

  • Нажав на информацию о картографии
  • Выбрано свойство моего флага
  • Изменено значение Тип от байта до Boolean
  • Восстановлено приложение

Затем я получил эту ошибку:

Ошибка 2019: указано сопоставление участников не действует. Тип 'Edm.Boolean [Nullable = True, DefaultValue =]' члена 'MyFlag' в типе "MyModel.MyItem" несовместим с 'SqlServer.tinyint [Nullable = True, DefaultValue =]' члена 'MyFlag' в типе 'MyModel.Store.MyItem'.

Есть ли способ иметь

MyItem item = new MyItem();
item.Flag = true;

и сохранить флаг в 1 в базе данных?

Ответ 1

Вы можете изменить тип данных MyFlag на bit в базе данных.

Ответ 2

Я думаю, что для tinyint вам придется сделать частичный класс и использовать отдельное поле, которое надлежащим образом читает/записывает в это поле. Однако структура корректно интерпретирует поля bit как boolean.

Вы можете попробовать что-то вроде ниже как частичное.

public partial class MyItem
{
    public bool FlagBool
    {
        get { return Flag == 1; }
        set { Flag = value ? 1 : 0; }
    }
}