2011-10-25 58 views
1

我升級到NHibernate 3.2。我使用的是流利NHibernate,但我沒有看到NH 3.2的新版本。我正在考慮使用包含的Conform映射器,但它似乎不允許使用複合ID。我無法更改數據庫,所以我有一個限制。NHibernate 3.2符合複合ID

在功能NHibernate我有這個(名稱只改爲例​​):

 Schema("MY_SCHEMA"); 
     Table("MY_TABLE"); 
     CompositeId() 
      .KeyProperty(x => x.CompanyId, "COMPANY_ID") 
      .KeyProperty(x => x.OrderId, "ORDER_ID") 
      .KeyProperty(x => x.OrderDate, "ORDER_DATE") 
      .KeyProperty(x => x.ProgramId, "PROGRAM_ID"); 

我會怎麼做這與NH 3.2順應?

感謝, 保羅

+1

有一個建立NH NH 3.2的FNH。這裏有一個NuGet包:http://nuget.org/List/Packages/FluentNHibernate/1.3.0.717 –

回答

4

你可以嘗試使用:

mapper.Class<YourEntity>(m=>{ 
m.Table("MY_TABLE"); 
m.Schema("MY_SCHEMA"); 
m.ComposedId(cid=> 
{ 
    cid.Property((e)=>e.CompanyId); 
    cid.Property((e)=>e.OrderId); 
    cid.Property((e)=>e.OrderDate); 
//others... 
}); 
}); 

而且,我只是猜測,因爲我不能FIGURA出你的數據庫,你可能會映射的單一部分鍵入多對一(即,您將以hbm編寫的舊密鑰 - 多對一密鑰),爲此,請使用cid.ManyToOne()而不是cid.Property(..);

+0

Felice,謝謝。你引導了我。我的解決方案如下所示:ComposedId(cid => {x => x.CompanyId,e => e.Column(「COMPANY_ID」)); Property(x => x.OrderId,e => e .Column(「ORDER_ID」));}); etc –

+0

@Paul我很高興我幫助解決了您的問題,我想指出一個事實,您可以自動生成列名稱,因爲您似乎有一個約定:看看這裏http://www.felicepollano.com/2011 /09/01/UsingNH32MappingByCodeForAutomaticMapping.aspx不是*你的情況,但我相信你可以從中得到一些想法。 –