2010-03-04 43 views
3

嘿,所以我可能完全不在這裏,但我仍然是新來的nhibernate與我如此裸露。nhibernate動態綁定類

我讀過這篇文章

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

而且正在尋找一種方式來動態地在運行時改變我的映射使用綁定到不同的表一對許多依賴於一個值我的父對象。

這裏是我的映射

<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> 

<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> 

現在的文章說,我應該能夠使用攔截器

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

現在的問題更改實體名稱是兩倍。

首先,我似乎無法讓這個攔截器開火,儘管在開啓我的會話時聲明瞭它,其次,我完全狂吠,這是否永遠不會工作?

+0

那麼這是否有用? – codeulike 2012-02-27 17:31:50

+0

恐怕不是。它似乎不適合__awkward__數據庫設計 – 2012-02-28 15:13:54

回答

0

我可以對第一個問題發表評論。打開會話時是否通過攔截器?

config.SetInterceptor(new yourInteceptor()); 

......... 

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