【问题标题】:do i need to set length for every poco property in Entity Framework Code First?我是否需要在 Entity Framework Code First 中为每个 poco 属性设置长度?
【发布时间】:2012-04-29 04:18:35
【问题描述】:

我是否需要在 Entity Framework Code First 中为每个 poco 属性设置长度?如果我不 为属性设置 stringLength 或 maxlength/minlength ,它将是 nvarchar(max) , nvarchar(max) 有多糟糕?我应该把它留在开发阶段,然后在生产前改进它吗?

【问题讨论】:

    标签: model-view-controller entity-framework-4 code-first nvarchar


    【解决方案1】:

    您应该为要限制长度的每个属性定义一个最大长度。请注意,nvarchar(max) 数据类型不同于 nvarchar(n) 数据类型,其中 n 是 1-4000 之间的数字。当您没有定义最大长度时获得的max 版本适用于 文本块,例如段落等。它可以处理非常大的长度,因此数据与记录的其余字段分开存储。另一方面,nvarchar(n) 与其余行内联存储。

    最好现在就按照您的需要设置这些值,而不是等到以后再设置。选择尽可能大的值,这样您就不必增加它们。 nvarchar(n) 有效地存储其信息;例如,nvarchar(200) 不一定占用 200 个字符的空间;它只使用足够的空间来存储实际放入其中的内容,再加上几个额外的字节来节省其长度。

    因此,只要有可能,您应该对实体的文本字段设置限制。

    【讨论】:

    • 据我所知,重要的推论是nvarchar(max),由于其不同,不能用作键。所以任何可能是键的东西都需要不同的值。
    【解决方案2】:

    NVARCHAR - 是可变长度字段。所以它只占用你需要的空间。另一方面,NCHAR 分配它需要的所有空间,而不是像 NVARCHAR 那样按需分配。 当列数据条目的大小可能会有很大差异时,MSDN 建议使用 nvarchar。 这是我在项目早期阶段要走的路。您可以在需要时对其进行调整。

    【讨论】:

    • nvarchar(#) 和 nvarchar(max) 之间有很大的区别。前者是你所说的领域。后者是另一种野兽,更像是旧的 ntext。
    【解决方案3】:

    根据下一篇博客post nvarchar(max) 与 ntext 不一样,直到实际值大小未达到 4000 个符号(因为限制为 8K,并且widechars 每个字符使用两个字节)。就它达到这个大小而言,它的行为与 ntext 几乎相同。所以对我来说,我看不出有什么好的理由避免使用 nvarchar(max) 数据类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2012-05-10
      • 2012-08-09
      • 2017-05-25
      • 1970-01-01
      相关资源
      最近更新 更多