我是否需要为Entity Framework Code First中的每个poco属性设置长度?
我是否需要为Entity Framework Code First中的每个poco属性设置长度?如果我不为 设置stringLength或maxlength/minlength属性,它将是nvarchar(max),nvarchar(max)有多糟?我应该把它放在发展阶段,并在生产之前改进它?我是否需要为Entity Framework Code First中的每个poco属性设置长度?
您应该为每个要限制长度的属性定义最大长度。请注意,nvarchar(max)
数据类型与nvarchar(n)
数据类型不同,其中n
是1-4000的数字。当您定义没有最大长度时,您获得的max
版本适用于大型文本块,如段落等。它可以处理非常大的长度,因此数据将与记录的其余字段分开存储。另一方面,nvarchar(n)
与其余行保持内联。
这可能是最好的了,现在就设置这些值,而不是等到稍后再做。选择和你需要的一样大的值,所以你永远不必增加它们。 nvarchar(n)
高效地存储其信息;例如,nvarchar(200)
不一定占用200个字符的空间;它只使用足够的空间来存储实际放入的内容,并且还需要额外的几个字节来保存其长度。
因此,只要有可能,您应该对实体的文本字段设置限制。
NVARCHAR - 是可变长度字段。所以它只消耗你需要的空间。另一方面,NCHAR按照NVARCHAR的要求分配所需的所有空间。 MSDN建议在列数据条目的大小可能差异很大时使用nvarchar。 在项目的早期阶段,这是我走的路。您可以在需要时调整它。
nvarchar(#)和nvarchar(max)之间存在非常大的差异。前者是你正在谈论的领域。后者是一个不同的野兽,更像旧的文字。 – 2012-04-27 02:33:28
根据下一个博客post在实际值大小未达到4000个符号(因为限制为8K,并且每个字符使用两个字节)之前,nvarchar(max)与ntext不同。只要它达到这个尺寸,它的行为几乎与ntext相同。至于我,我没有看到有任何理由避免使用nvarchar(max)数据类型。
据我所知,重要的推论是nvarchar(max)由于其不同而不能用作关键字。所以任何可能是关键的东西都需要不同的价值。 – glenatron 2012-09-18 15:08:00