2011-01-05 10 views
1

だから私は、次のプロパティとNHibernateのマッピングファイルを持っている:NHibernateの文字列プロパティの長さ属性

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

私は、たとえば長さ=「50」を設定した場合、データベースに挿入するとき、NHibernateのは、文字列を切り捨てます。 lengthプロパティを削除すると、そのデータベースは例外のように例外をスローします。レコードを挿入できないと言っています。これは正常な動作ですか?そうであれば、lengthプロパティの目的は何か。おそらく私はNHibernateを間違って設定したか、状況を認識していないでしょう。どんな考えやアイデアも素晴らしいだろう。

答えて

5

Lengthプロパティは、スキーマエクスポータを使用しているときに、モデル/マッピングからデータベースを作成するために使用されます。

永続性の間に文字列の長さを検証する場合は、NHibernate.Validatorプロジェクトを参照してください。

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

+0

私はフルネームの文字列の長さが50文字を超えた場合、挿入は失敗することをテストするためのユニットテストを書いていたので、私は問題を捕まえた理由でした。データベースに挿入する前に、文字列が失敗して切り捨てられませんでした。マッピングファイルのlength属性を削除するとすぐに失敗しました。 – dolphy

+1

NHibernate(他のORMと同様)は、パラメータ化されたクエリを使用します。フィールド/プロパティの文字列長を50に設定すると、nvarchar(4000)ではなくnvarchar(50)が使用されます。これにより、文字列が失敗する代わりに切り捨てられます。 –

+0

ドミトリーありがとうございます。 – dolphy