2009-10-13 194 views
3

我有兩張表,Vehicle和Make。這兩個是使用MakeId作爲車輛表上的外鍵加入的。我的映射文件類似於這樣NHibernate映射外鍵

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
     <class name="Demo.Business.Objects.Vehicle, Demo.Business.Objects" table="Vehicle" > 
     <id name="VehicleId" type="int" > 
      <generator class="native" /> 
     </id> 
     <property name="RegNumber" type="String" /> 
     <property name="VehicleId" type="int" /> 
     <property name="CustomerId" type="int" /> 

     <join table="Make" fetch="join"> 

      <key column="MakeId" foreign-key="MakeId"/> 
      <property name="Description" type="String" /> 
     </join> 
     </class> 
    </hibernate-mapping> 

我還以爲這將加入兩個表上廠名標識,但該IOS產生嘗試的SQL以下連接:vehicle.vehicleid = make.makeid.

我怎樣才能得到這工作?即我預計:

select * from Vehicle 
    inner join Make on Make.MakeId = Vehicle.Make Id 
+0

道歉,StackOverflow剪掉了其餘的映射文件。剩下的是對Vehicle表的認可,並且工作正常,它只是使我看起來無法排序的連接。 – januszstabik 2009-10-13 14:24:01

+0

我使用StackOverflow語法編輯了您的問題,以便所有內容都顯示出來,並且格式良好且顏色也很好:-) – KLE 2009-10-13 14:42:59

回答

0

你需要以不同的方式映射製作類:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="Demo.Business.Objects.Vehicle, Demo.Business.Objects" table="Vehicle" > 
    <id name="VehicleId" type="int" > 
     <generator class="native" /> 
    </id> 
    <property name="RegNumber" type="String" /> 
    <property name="VehicleId" type="int" /> 
    <property name="CustomerId" type="int" /> 
    <many-to-one name="Make" column="MakeId"/> 
    </class> 
    <class name="(blahblah).Make, blahblah"> 
    <id name="MakeId" type="int"> 
     <generator class="native" /> 
    </id> 

    <property name="Description" type="String" /> 
    </class> 
</hibernate-mapping> 

你的「汽車」類的類型應該作的一作出財產。

+1

我已經使用過它了。這給了Vehicle一個Make對象的屬性(不幸的是,Make表格也與外鍵連接在一起,我不想要一個可怕的深對象圖)。客戶端需要支持傳統應用程序時,我無法更改數據庫的架構。因此,我想實現的更像是一個「視圖」,從而檢索連接表中所有適當的列。這將非常像EF中的聚合表。 – januszstabik 2009-10-13 15:00:38

+0

nhibernate多對一關係在默認情況下是懶惰的,所以除非另有指定,否則不會提取對象圖。 – 2009-10-13 16:14:54

+0

我可以解決加載問題,這很好。數據庫的模式非常規範化,這意味着我的對象圖形可能是5-6個對象深度,這意味着要使用像object1.object2.object3.object4.object5.object6.Name這樣的語法。我不確定客戶是否會喜歡這個,所以想在我說不能完成之前找到解決方案。 – januszstabik 2009-10-14 10:00:28