Я работаю с функцией 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 Comments { get; set; }
}
Когда я запускаю свое приложение, автоматически создается база данных SQL CE 4.0 со следующей схемой:
Пока все хорошо! Однако данные, которые я буду вставлять в свойства Body
и BodyHtml
, обычно больше максимально допустимой длины для типа столбца NVarChar
, поэтому мне нужен EF для создания текстовых
столбцов для этих свойств.
Однако я не могу найти способ сделать это! После небольшого поиска в Google и чтения я попытался указать тип столбца, используя 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)
, поэтому кажется, что аннотация игнорируется.
Кто-нибудь может помочь? Кажется, что это должно быть довольно распространенное требование, но мои поиски оказались бесплодными!