NHibernate字符串属性长度属性

NHibernate字符串属性长度属性,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,因此,我有一个具有以下属性的NHibernate映射文件: <property name="FullName" column="FullName" type="string" not-null="true" /> 例如,如果我设置length=“50”,NHibernate将在插入数据库时截断字符串。如果我删除length属性,该数据库会像应该的那样抛出异常;说它不能插入记录。这是正常的行为吗?如果是,那么长度属性的用途是什么。也许我配置的NHibernate不正确,或者我不了

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

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


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

当您使用schema exporter时,Length属性用于从模型/映射创建数据库

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


使用模式导出器时,Length属性用于从模型/映射创建数据库

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


我发现这个问题的原因是,我正在编写一个单元测试,以测试如果FullName的字符串长度超过50个字符,插入将失败。它没有失败,在插入数据库之前截断了字符串。我一删除映射文件中的length属性,它就失败了。NHibernate(就像其他任何ORMs一样)使用参数化查询。将字段/属性的字符串长度设置为50时,它使用nvarchar(50)而不是nvarchar(4000)。它会导致字符串被截断而不是失败。我发现此问题的原因是因为我正在编写一个单元测试,以测试如果FullName的字符串长度超过50个字符,则插入将失败。它没有失败,在插入数据库之前截断了字符串。我一删除映射文件中的length属性,它就失败了。NHibernate(就像其他任何ORMs一样)使用参数化查询。将字段/属性的字符串长度设置为50时,它使用nvarchar(50)而不是nvarchar(4000)。它会导致字符串被截断,而不是失败。