0

Considérons que nous avons une application qui utilise Fluent NHibernate pour accéder à certaines bases de données (nous ne savons pas exactement de quel type de DB il s'agira). Et considérons que nous voulons cartographier une classe qui a un identifiant de type non signé (par exemple ulong):Comment puis-je récupérer une instance Dialect dans le mappage NHibernate Fluent

public class MyClass 
{ 
    public ulong id { get; set; } 

    //Other stuff 
    ... 
} 

Nous avons aussi une coutume IUserType que ulong cartes comme un certain type pris en charge par DB (tant par exemple). Appelons le ULongAsLong.

Mon but est d'écrire une cartographie MyClass de sorte que son id serait mis en correspondance comme si unsigned bigint DB prend en charge les types non signés et que ULongAsLong si elle ne fonctionne pas. Quelque chose comme ceci:

public class MyClassMap : ClassMap<MyClass> 
{ 
    public MyClassMap() 
    { 
     //Here goes some function or something that retrieves a Dialect instance. 
     var dialect = ...; 
     if (supportsULong(dialect)) 
     { 
      Id(x => x.id);      
     } 
     else 
     { 
      Id(x => x.id).CustomType<ULongAsLong>(); 
     } 

     //Mapping everything else 
     ... 
    } 

    private bool supportsULong(Dialect dialect) 
    { 
     //Some code that finds out if ulong is supported by DB. 
    } 
} 

La question est de savoir comment puis-je récupérer une instance Dialect dans la cartographie pour prendre une décision de mapper un id comme ulong ou comme ULongAsLong.

Répondre

0

Regardez ISessionFactoryImplementor, voir https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Engine/ISessionFactoryImplementor.cs

Dialect.Dialect Dialect { get; } 

possible d'obtenir l'aide:

ISessionFactory factory = ...; 
((ISessionFactoryImplementor)factory) 
+0

Bien sûr, je peux obtenir un '' Dialect' exemple de ISessionImplementor'. Mais la question était de savoir comment en obtenir un dans ma cartographie FNH. Je n'ai trouvé aucun moyen d'obtenir 'ISessionImplementor' là. – rodya

Questions connexes