Question

Quels types de considérations faut-il prendre en compte pour migrer une application depuis NHiberner 1,2 à 2,0 ?Quels sont les changements radicaux par rapport aux changementschangements recommandés ?

Y a-t-il des problèmes de cartographie ?

Était-ce utile?

La solution

Modifications majeures dans NHibernate 2.0

Si vous avez une bonne couverture de test, c'est un travail fastidieux.

Modifier:Nous avons effectué une mise à niveau ce matin.Il n'y a rien de majeur.Vous devez Flush() la session après la suppression.L'espace de noms Expression a été renommé Criterion.Tout cela est couvert dans le lien ci-dessus.Les mappages ne nécessitent aucune modification.C'est assez transparent.Oh, et les transactions partout, mais vous le faisiez probablement déjà.

Au fait, voici un aperçu intéressant des changements : http://codebetter.com/blogs/patricksmacchia/archive/2008/08/26/nhibernate-2-0-changes-overview.aspx

Autres conseils

J'ai trouvé la réponse ici :

http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/

version or 2.0.0.GA

CHANGEMENTS DE RUPTURE de NH1.2.1GA à NH2.0.0

  • Infrastructure

    • .NET 1.1 n'est plus pris en charge
    • Nullables.NHibernate n'est plus pris en charge (utilisez les types nullables de .NET 2.0)
    • Contribution déplacée.Nouvel emplacement
  • Temps de compilation

    • L'espace de noms NHibernate.Expression a été renommé NHibernate.Criterion
    • IInterceptor a des méthodes supplémentaires.(IsUnsaved a été renommé IsTransient)
    • Stratégie de nommage
    • J'écris
    • IEntityPersister
    • IVersionType
    • IBatcher
    • IUserCollectionType
    • IEnhancedUserType
    • IPropertyAccessor
    • ValueTypeType renommé PrimitiveType
  • Modifications radicales possibles pour les frameworks externes

  • Diverses classes ont été déplacées entre les espaces de noms
  • Diverses classes ont été renommées (pour correspondre aux noms d'Hibernate 3.2)
  • L'interface ISession a des méthodes supplémentaires
  • Fournisseur ICache
  • ICritère
  • CriteriaQueryTranslator

  • Temps d'initialisation

    • La section <nhibernate>, dans App.config, n'est plus prise en charge et sera ignorée.Le schéma de configuration pour le fichier de configuration et App.config est désormais identique et le nom de la section App.config est :<configuration de mise en veille prolongée>
    • <hibernate-configuration> a un schéma différent et tous les noms de propriétés sont vérifiés
    • les propriétés de configuration ne sont plus préfixées par "hibernate.", si auparavant vous spécifiiez "hibernate.dialect", maintenant vous spécifiez simplement "dialect"
    • Toutes les requêtes nommées seront validées au moment de l'initialisation, une exception sera levée si aucune n'est valide (peut être désactivée si nécessaire)
    • Des contrôles plus stricts pour les classes proxy (toutes les méthodes publiques doivent être virtuelles)

  • Durée

    • SaveOrUpdateCopy() renvoie une nouvelle instance de l'entité sans modifier l'originale
    • AutoFlush ne se produira pas en dehors d'une transaction - Les transactions de base de données ne sont jamais facultatives, toutes les communications avec la base de données doivent avoir lieu au sein d'une transaction, quelle que soit la lecture ou l'écriture des données.
    • NHibernate renverra des requêtes longues pour count(*) sur SQL Server
    • <formule> doit contenir des parenthèses si nécessaire
    • Ces noms de fonctions HQL peuvent provoquer des conflits dans vos noms réservés HQL :
      • sous-chaîne
      • Localiser
      • garniture
      • longueur
      • longueur_bit
      • se fondre
      • nullif
      • abdos
      • module
      • carré
      • supérieur
      • inférieur
      • casting
      • extrait
      • concaténer
      • horodatage_actuel
      • date système
      • deuxième
      • minute
      • heure
      • jour
      • mois
      • année
      • str
    • <any> lorsque meta-type="class" le type persistant est une chaîne contenant le Class.FullName
      • Afin de définir un paramètre dans une requête, vous devez utiliser SetParameter(”paraName”, typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)

  • Cartographie

  • <n'importe lequel> :le méta-type par défaut est « string » (au lieu de « class »)
  • Licencié sous: CC-BY-SA avec attribution
    Non affilié à StackOverflow
    scroll top