2010-03-04 13 views
3

Hey, Donc, je suis peut-être complètement hors la marque ici, mais je suis toujours nouveau à nhibernate si nue avec moi.nhibernate lier dynamiquement une classe

J'ai lu cet article

http://www.mattfreeman.co.uk/2009/01/nhibernate-21-trunk-entity-name-some-inheritance-and-dynamic-component/

Et je cherche un moyen de changer dynamiquement ma cartographie à l'exécution de se lier à une autre table en utilisant une à plusieurs dépendant d'une valeur mon objet parent.

Voici mes applications

<bag name="Data" mutable="true" > 
    <key> 
     <column name="Log_Link" /> 
     <column name="channel" /> 
    </key> 
    <one-to-many class="Fluent.Entities.Meters.FTIMeterChannelData, Poco" entity-name="30" /> 
</bag> 

et

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true"> 
    <class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Fluent.Entities.Meters.FTIMeterChannelData, Poco" table="loggerData" entity-name="30"> 
    <composite-id mapped="false" unsaved-value="undefined"> 
     <key-property name="Channel" type="System.Int32"> 
     <column name="channel" /> 
     </key-property> 
     <key-property name="LogLink" type="System.Int32"> 
     <column name="Log_Link" /> 
     </key-property> 
    </composite-id> 
    <property name="Date" type="System.DateTime"> 
     <column name="hhdate" /> 
    </property> 
    </class> 

    <class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Fluent.Entities.Meters.FTIMeterChannelData, Poco" table="loggerData10" entity-name="15"> 
    <composite-id mapped="false" unsaved-value="undefined"> 
     <key-property name="Channel" type="System.Int32"> 
     <column name="channel" /> 
     </key-property> 
     <key-property name="LogLink" type="System.Int32"> 
     <column name="Log_Link" /> 
     </key-property> 
    </composite-id> 
    <property name="ReadingType" type="System.Char"> 
     <column name="readingtype" /> 
    </property> 
    </class> 
</hibernate-mapping> 

maintenant comme le dit l'article, je devrais être en mesure de changer le nom de l'entité en utilisant un intercepteur

class LoggerDataInterceptor : EmptyInterceptor 
    { 
     public override string GetEntityName(object entity) 
     { 
      return Convert.ToString("20"); 
     } 
    } 

Maintenant la question est deux fois. Premièrement, je n'arrive pas à tirer sur cet intercepteur, même si je l'ai déclaré lors de l'ouverture de ma session, et deuxièmement, est-ce que je suis complètement abasourdi et est-ce que ça ne marchera jamais?

+0

Est-ce que cela a déjà fonctionné? – codeulike

+0

Je ne crains pas. Il semble qu'il ne répond pas aux conceptions de base de données __awkward__ –

Répondre

0

Je peux commenter la première question. Passez-vous l'intercepteur lorsque vous ouvrez la session?

config.SetInterceptor(new yourInteceptor()); 

......... 

if (config.Interceptor != null) 
{ 
    session = factory.OpenSession(config.Interceptor); 
} 
    else 
{  
    session = factory.OpenSession(); 
}