Entity Framework и SQL Compact Edition - как мне получить текст?
Ответ на мой вопрос должен быть совершенно очевидным, но я не могу его найти. У меня есть файл EDMX, который имеет одну таблицу. Есть поле типа string
, EF всегда генерирует nvarchar для этого (что отчасти ожидаемо), но мне нужно ntext
вместо nvarchar
для этого поля 4000 слишком мало для меня.
Так скажите мне - как правильно заставить EF генерировать ntext
поля?
PS Использование Entity Framework 4, SQL CE 3.5
3 ответа
Я полагаю, вы сначала используете модель, не так ли? Вы можете просто создать собственный шаблон T4 для генерации SQL DDL и включить логику, которая будет использовать NTEXT
когда поле определено с максимальным размером.
Шаблон по умолчанию включен:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToSQL10.tt
Просто скопируйте этот шаблон и найдите логику, в которой создается тип данных. Как только у вас есть шаблон, измените Шаблон генерации DDL в свойствах модели (в конструкторе) на измененную версию.
С генерацией шаблона вы можете сделать гораздо больше, потому что вы можете добавить некоторые аннотации к вашей модели (XML) и использовать их для пользовательской логики в процессе генерации SQL.
Просто установите для свойства "MaxLength" в конструкторе значение "Max". Это создаст поле ntext в БД SQL CE.
Если ваш проект содержит модель данных сущности ADO.Net (.edmx
) тогда посмотрите отличный ответ Ладислава.
Но если вы используете библиотеки Code First и ваш проект не содержит .edmx
тогда вы можете использовать System.ComponentModel.DataAnnotations.ColumnAttribute
чтобы указать тип столбца:
using System.ComponentModel.DataAnnotations;
public class Note {
[Column("Note", TypeName="ntext")]
public string Note { get; set; }
}