是否有一种方法来覆盖nvarchar(max)与设置maxlength值使用EF 4.2代码优先配置



默认情况下,EF 4.2 codefirst将字符串属性后面的数据库列设置为nvarchar(max)。

单独(每个属性)我可以通过指定[MaxLength(512)]属性来覆盖这个约定。

是否有一种全局应用配置的方法来做到这一点?似乎modelbuilder上的配置api只允许每个实体覆盖,而modelbuilder上的约定api只允许删除。

没有可用的全局配置。自定义约定在CTP阶段从EF Code First中删除。

我认为你可以做到。在模型表的属性上方添加StringLength属性。就像下面这样。(记住你需要使用System.ComponentModel.DataAnnotations;)

    [StringLength(160)]
    public string Title { get; set; }

  • 首先,不能在MAX列上创建索引。可以使用全文索引,但不能在列上创建索引来提高查询性能。

  • 从存储角度看,当N &lt时,nvarchar(max)和nvarchar(N)之间没有差异;4000. 当数据不适合时,将数据存储在行溢出页或行溢出页上。当您使用nvarchar(max)并存储超过4000个字符(8000字节)时,SQL Server使用不同的方法来存储数据-类似于旧的TEXT数据类型-它存储在LOB页面中。

  • 性能方面-同样,对于N<4000和(max) -没有区别。嗯,从技术上讲,它会影响行大小估计,并可能引入一些问题-您可以在这里阅读更多关于它的内容:可变宽度列的最佳方法

  • 可以影响系统性能的是行大小。如果您有SCAN表的查询,大的行大小将导致每个表更多的数据页->更多的io操作->性能下降。如果是这种情况,您可以尝试执行垂直分区并将nvarchar字段移动到不同的表中。

最新更新