我正在使用的Code特性,并试图了解如何指定在自动生成数据库时应该创建的列数据类型。
我有一个简单的模型:
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; }
}在运行应用程序时,将使用以下模式自动创建SQLCE4.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),因此似乎忽略了注释。
有人能帮忙吗?这似乎是一个相当普遍的要求,但我的搜索一直没有结果!
发布于 2011-02-06 13:38:24
我很感激对现有答案所付出的努力,但我还没有发现它真的回答了这个问题.所以我测试了这个,然后发现
[Column(TypeName = "ntext")]
public string Body { get; set; }(来自System.ComponentModel.DataAnnotations的)将用于创建ntext类型列。
(我所接受的答案的问题是,它似乎表明您应该更改接口中的列类型,但问题是如何以编程的方式进行。)
发布于 2011-03-21 10:53:28
您可以使用以下DataAnnotation,代码优先将生成数据库允许的最大大小的数据类型。在Sql的情况下,它会产生一个底层ntext列。
[MaxLength]或者使用EF4.1RC fluent API..。
protected override void OnModelCreating(ModelBuilder modelBuilder){
    modelBuilder.Entity<Article>()
        .Property(p => p.Body)
        .IsMaxLength();
}发布于 2011-02-04 08:13:36
你试过ntext了吗?我刚刚创建了一个SQLCE4.0数据库,当我手动向表中添加列时,我注意到text在数据类型列表中不可用,而ntext是可用的。就像你可以选择nvarchar,但不能选择varchar。
不幸的是,您可以选择的最大nvarchar大小是4000。因此,nvarchar(max)也不是一个选项。

https://stackoverflow.com/questions/4895465
复制相似问题