Tronquer automatiquement les strings dans Fluent NHibernate

Tout d'abord, j'ai lu cet article , celui-ci et celui-ci , mais j'ai encore une question. J'ai donc besoin d'une solution C # concrète qui résout le problème de troncature en utilisant n'importe laquelle de ces solutions: IUserType, interception ou ValidationDef . Je veux déclarer des champs comme celui-ci:

public class MyEntity { [Truncate(length=255)] public virtual ssortingng Comments { get; set; } } 

J'ai besoin de tronquer la ligne de corde automatiquement avant de mettre à jour / save l'opération NHibernate. Dans ce cas, je ne vais pas get une exeption System.Data.SqlClient.SqlErrorCollection

Chaîne ou des données binarys seront tronquées

Honnêtement, la solution la plus simple et la plus lisible est de laisser la class s'en occuper. Quelque chose comme ça:

 public class MyEntity { private ssortingng comments; public virtual ssortingng Comments { get {return comments;} set {comments = str.Subssortingng(0, Math.Min(value.Length, 255))}; } } 

MAIS je ne pense pas que c'est ce que vous requestz. Sinon, vous pouvez faire quelque chose avec un IInterceptor qui a plusieurs methods comme OnSave. Vous auriez besoin d'écrire quelque chose comme ça pour la méthode (notez que c'est du code Psudo parce que c'est beaucoup de choses!):

  public boolean OnSave(object entity, object id, object[] state, ssortingng[] propertyNames, IType[] types) { for ( int i=0; i<propertyNames.Length; i++ ) { if ( objectHasAtsortingbuteOnproperty(propertyNames[i], Truncate)) { trucate(entity, propertyNames[i]) return true; } } return true; } 

puis enregistrez l'intercepteur avec la session d'hibernation. Chaque entité sauvegardée passera à travers et sera vérifiée pour les strings qui doivent être tronquées.

Voici la documentation sur les intercepteurs dans NHibernate: http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-interceptors

Vérifiez le dépassement de stack pour get des valeurs d'atsortingbut et appeler des régleurs de propriétés par reflection.