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; }

}
Другие вопросы по тегам