正直なところ、最も簡単で読みやすい解決策は、クラスにそれを処理させることです。このようなもの:
public class MyEntity {
private string comments;
public virtual string Comments {
get {return comments;}
set {comments = str.Substring(0, Math.Min(value.Length, 255))};
}
}
しかし、私はそれがあなたが求めていることではないと思います。それ以外に、OnSaveのようないくつかのメソッドを持つIInterceptorで何かを行うことができます。メソッドには次のようなものを書く必要があります(これはたくさんのものがあるのでPsudoコードであることに注意してください!):
public boolean OnSave(object entity,
object id,
object[] state,
string[] propertyNames,
IType[] types)
{
for ( int i=0; i<propertyNames.Length; i++ )
{
if ( objectHasAttributeOnproperty(propertyNames[i], Truncate))
{
trucate(entity, propertyNames[i])
return true;
}
}
return true;
}
次に、インターセプターを休止状態セッションに登録します。保存されたすべてのエンティティはそれを通過し、切り捨てが必要な文字列がないかチェックされます。
NHibernateのインターセプターに関するドキュメントは次のとおりです:http:
//www.nhforge.org/doc/nh/en/index.html#manipulatingdata-interceptors
スタックオーバーフローをチェックして、属性値を取得し、リフレクションを介してプロパティセッターを呼び出します。