Entity Framework и SQL Compact Edition - как мне получить текст? - PullRequest
1 голос
/ 27 мая 2011

Ответ на мой вопрос должен быть совершенно очевидным, но я не могу его найти. У меня есть файл EDMX, который имеет одну таблицу. Есть поле типа string. EF всегда генерирует nvarchar для этого (что отчасти ожидается), но мне нужно ntext вместо nvarchar для этого поля, поскольку 4000 слишком мало для меня.

Так скажите мне - как правильно заставить EF генерировать ntext полей?

PS Использование Entity Framework 4, SQL CE 3.5

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Полагаю, вы сначала используете модель, не так ли?Вы можете просто создать собственный шаблон 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.

1 голос
/ 22 августа 2013

Просто установите для свойства «MaxLength» в конструкторе значение «Max». Это создаст поле ntext в БД SQL CE.

0 голосов
/ 22 марта 2012

Если ваш проект содержит модель данных сущности 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; }

}
...