Как сопоставить свойство char с использованием API-интерфейса Entity Framework 4.1 "только для кода"?
У меня есть объект, обладающий свойством char:
public class Product
{
public char Code
{
get;
set;
}
}
Entity Framework, похоже, не может отображать символы (это поле отсутствует в базе данных при создании схемы базы данных из объектов модели). В любом случае, я могу сопоставить char (например, строку) с использованием свободного API? Я не хочу изменять объекты модели, поскольку они являются частью старой библиотеки.
Ответы
Ответ 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. (Изменить настройку Инструменты → Опция → Дизайнер → Дизайнер таблиц таблиц → Снимите флажок "Предотвратить сохранение изменений, требующих создания таблиц"