【问题标题】:NHibernate string property length attributeNHibernate 字符串属性长度属性
【发布时间】:2011-06-04 06:15:51
【问题描述】:

所以我有一个具有以下属性的 NHibernate 映射文件:

<property name="FullName" column="FullName" type="string" not-null="true" />

例如,如果我设置 length="50",NHibernate 将在插入数据库时​​截断字符串。如果我删除 length 属性,该数据库会像它应该的那样抛出异常;说它不能插入记录。这是正常行为吗?如果是这样,长度属性的目的是什么。也许我错误地配置了 NHibernate,或者我不了解这种情况。任何想法/想法都会很棒。

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    当您使用模式导出器时,长度属性用于从模型/映射创建数据库。

    如果您在持久化期间寻找字符串长度验证,请查看 NHibernate.Validator 项目。

    http://nhforge.org/blogs/nhibernate/archive/2009/05/01/nhibernate-validator.aspx

    【讨论】:

    • 我发现这个问题的原因是因为我正在编写一个单元测试来测试如果 FullName 的字符串长度超过 50 个字符,插入将失败。在插入数据库之前,它没有失败并截断了字符串。一旦我删除了映射文件中的长度属性,它就失败了。
    • NHibernate(就像任何其他 ORM 一样)使用参数化查询。当您将字段/属性的字符串长度设置为 50 时,它使用 nvarchar(50) 而不是 nvarchar(4000)。它会导致字符串被截断而不是失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 2011-04-08
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多