老实说,最简单、最易读的解决方案是让类来处理它。像这样的东西:
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 执行某些操作。您需要为该方法编写类似的内容(注意这是伪代码,因为它有很多东西!):
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
检查 Stack Overflow 以获取属性值并通过反射调用属性设置器。