Подтвердить что ты не робот

Как сопоставить свойство char с использованием API-интерфейса Entity Framework 4.1 "только для кода"?

У меня есть объект, обладающий свойством char:

public class Product
{
    public char Code
    {
        get;
        set;
    }
}

Entity Framework, похоже, не может отображать символы (это поле отсутствует в базе данных при создании схемы базы данных из объектов модели). В любом случае, я могу сопоставить char (например, строку) с использованием свободного API? Я не хочу изменять объекты модели, поскольку они являются частью старой библиотеки.

4b9b3361

Ответ 1

Char недействителен примитивный тип для сущности framework = структура сущности не отображает его. Если вы проверите ссылку CSDL, вы увидите список допустимых типов (Char не среди них).

База данных char(1) переводится как string (перевод SQL в CSDL). Char описывается как строка, отличная от юникода, с фиксированной длиной 1.

Единственным уродливым вариантом является второе сопоставленное свойство, использующее строку, и ваше свойство Char, не связанное с отображением, просто использует string[0] из этого свойства. Это просто еще один пример того, как в EF отсутствуют простейшие сопоставления типов или преобразователи.

Ответ 2

В Fluent API вы можете указать тип данных столбца базы данных, используя метод HasColumnType, например:

modelBuilder.Entity<Product>()   
.Property(p => p.Code)   
.HasColumnType("char");

По словам Андре Артуса здесь, HasColumnType доступен в EF4.1.

Для тех, кто использует аннотации данных, атрибут ColumnAttribute может выполнить одно и то же.

[Column(TypeName="char")]
public string Code { get; set; }

Ответ 3

Существуют альтернативные способы решения этой проблемы только для целей ТЕСТИРОВАНИЯ. Сделайте поле от нуля до нулевого значения, начиная с режима разработки. Иногда он ограничен SQL Management Studio. (Изменить настройку Инструменты → Опция → Дизайнер → Дизайнер таблиц таблиц → Снимите флажок "Предотвратить сохранение изменений, требующих создания таблиц"