我是否需要在 Entity Framework Code First 中为每个 poco 属性设置长度?如果我没有为属性设置 stringLength 或 maxlength/minlength ,它将是 nvarchar(max) ,nvarchar(max) 有多糟糕?我应该把它留在开发阶段,然后在生产前改进它吗?
3 回答
您应该为要限制长度的每个属性定义一个最大长度。请注意,nvarchar(max)
数据类型与数据类型不同nvarchar(n)
,其中n
是 1-4000 之间的数字。max
当您没有定义最大长度时获得的版本适用于大块文本,例如段落等。它可以处理非常大的长度,因此数据与记录的其余字段分开存储。nvarchar(n)
另一方面,与其余行内联存储。
最好现在就根据需要设置这些值,而不是等到以后再设置。选择尽可能大的值,这样您就不必增加它们。nvarchar(n)
有效地存储其信息;例如,anvarchar(200)
不一定占用 200 个字符的空间;它只使用足够的空间来存储实际放入其中的内容,再加上几个额外的字节来节省其长度。
因此,只要有可能,您应该对实体的文本字段设置限制。
NVARCHAR - 是可变长度字段。所以它只占用你需要的空间。另一方面,NCHAR 分配它需要的所有空间,而不是像 NVARCHAR 那样按需分配。当列数据条目的大小可能会有很大差异时,MSDN 建议使用 nvarchar。这是我在项目早期阶段要走的路。您可以在需要时对其进行调整。
根据下一篇博客文章nvarchar(max) 与 ntext 不同,直到实际值大小未达到 4000 个符号(原因限制为 8K,并且widechars 每个字符使用两个字节)。就它达到这个大小而言,它的行为与 ntext 几乎相同。所以对我来说,我没有看到任何避免使用 nvarchar(max) 数据类型的充分理由。