Я работаю с функцией Code First в Entity Framework, и я пытаюсь выяснить, как я могу указать типы данных столбцов, которые должны быть созданы, когда база данных автоматически сгенерирована.
У меня есть простая модель:
public class Article
{
public int ArticleID { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Summary { get; set; }
public string SummaryHtml { get; set; }
public string Body { get; set; }
public string BodyHtml { get; set; }
public string Slug { get; set; }
public DateTime Published { get; set; }
public DateTime Updated { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
Когда я запускаю свое приложение, база данных SQL CE 4.0 автоматически создается со следующей схемой:
До сих пор так хорошо! Однако данные, которые я буду вставлять в свойства Body
и BodyHtml
, обычно больше максимально допустимой длины для типа столбца NVarChar
, поэтому я хочу, чтобы EF генерировал столбцы Text
для этих свойств.
Однако я не могу найти способ сделать это! После довольно многого разговора и чтения я попытался указать тип столбца, используя DataAnnotations
, из информации, найденной в этом ответе:
using System.ComponentModel.DataAnnotations;
...
[Column(TypeName = "Text")]
public string Body { get; set; }
Это вызывает следующее исключение (при удалении базы данных и повторное выполнение приложения):
Schema specified is not valid. Errors: (12,6) : error 0040: The Type text is not qualified with a namespace or alias. Only PrimitiveTypes can be used without qualification.
Но я понятия не имею, какое пространство имен или псевдоним я должен указывать, и я не мог найти ничего, что могло бы сказать мне.
Я также попытался изменить аннотацию по эта ссылка:
using System.Data.Linq.Mapping;
...
[Column(DbType = "Text")]
public string Body { get; set; }
В этом случае создается база данных, но столбец Body
по-прежнему является NVarChar(4000)
, поэтому кажется, что аннотация игнорируется.
Может ли кто-нибудь помочь? Это похоже на то, что это должно быть довольно распространенным требованием, но мой поиск оказался бесплодным!