Я работаю с функцией 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 со следующей схемой:
![DB Schema](https://i.stack.imgur.com/A4OI9.gif)
Пока все хорошо! Однако данные, которые я буду вставлять в свойства Body
и BodyHtml
, обычно превышают максимально допустимую длину для типа столбца NVarChar
, поэтому я хочу, чтобы EF генерировал столбцы Text
для этих свойств.
Однако я не могу найти способ сделать это! После долгого поиска в 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)
, поэтому аннотация игнорируется.
Кто-нибудь может помочь? Кажется, это должно быть довольно распространенным требованием, но мои поиски были бесплодны!