Как мне указать, что свойство должно генерировать столбец TEXT, а не nvarchar (4000) - PullRequest
49 голосов
/ 04 февраля 2011

Я работаю с функцией 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

Пока все хорошо! Однако данные, которые я буду вставлять в свойства 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), поэтому аннотация игнорируется.

Кто-нибудь может помочь? Кажется, это должно быть довольно распространенным требованием, но мои поиски были бесплодны!

Ответы [ 12 ]

1 голос
/ 04 февраля 2011

Вы пробовали строчные буквы "text" этом обсуждении MSDN поставщик данных чувствителен к регистру.

0 голосов
/ 04 июня 2016

Если вы выполняете add-migration и update-database с помощью диспетчера пакетов, вы можете изменить таблицу создания, добавив storeType следующим образом:

       CreateTable(
            "dbo.Table_Name",
            c => new
                {
                    ID = c.Int(nullable: false, identity: true),
                    Title = c.String(nullable: false, maxLength: 500),
                    Body = c.String(unicode: false, storeType: "ntext"),
                })
            .PrimaryKey(t => t.ID);
...