Установите для свойства модели логическое значение в Entity Framework - PullRequest
15 голосов
/ 18 сентября 2009

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

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

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

  1. Кликнул по деталям сопоставления
  2. Выбранный мой флаг
  3. Изменен тип с байта на логический
  4. Перестроено приложение

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

Ошибка 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 в базе данных?

Ответы [ 2 ]

18 голосов
/ 18 сентября 2009

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

3 голосов
/ 18 сентября 2009

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

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

public partial class MyItem
{
    public bool FlagBool
    {
        get { return Flag == 1; }
        set { Flag = value ? 1 : 0; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...