2012-09-07 21 views
9

ben eski veritabanı ile çalışıyorum ve aşağıdaki tablolar vardır:NHibernate haritalama biri değil birincil anahtar

Person     ExternalFile 
------     ------------ 
Id   (int, PK) Key   (string) 
ConnectionId (int)  Type   (int) 
Name   (string) ConnectionId (int) 
Firstname (string) Path   (string) 
         Id   (int, PK) 

Bir kişisel birçok harici dosyaları vardır.

Örnek verilen:

Person A    ExternalFile1   ExternalFile2 
--------    -------------   ------------- 
Id: 1     Key: 'WN'    Key: 'WN' 
ConnectionId: 29  Type: 4    Type: 4 
Name: 'Foo'    ConnectionId: 29  ConnectionId: 29 
Firstname: 'Bar'  Path: 'C:/file1.txt' Path: 'D:/file2.txt' 
         Id: 1     Id: 2 

Bunu haritalayabilir kullanıcı ExternalFiles bir çanta vardır ki?

Benim mappingfiles

ExternalFile:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Not.Relative" assembly="Not"> 
    <class name="ExternalFile" table="tbl_externalfiles" lazy="false"> 
    <id name="Id" column="`Id`"> 
     <generator class="identity" /> 
    </id> 
    <property name="Key" column="`CDKey`" /> 
    <property name="ConnectionId" column="`KeyValue`" /> 
    <property name="Type" column="`DocType`" /> 
    <property name="Path" column="`Path`" /> 
    </class> 
</hibernate-mapping> 

Kişi:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Not.Relative" assembly="Not"> 
    <class name="Person" table="tbl_person" lazy="false"> 
    <id name="Id" column="`Id`"> 
     <generator class="identity" /> 
    </id> 
    <property name="ConnectionId" column="`pairid`" /> 
    <property name="Name" column="`name`" /> 
    <property name="Firstname" column="`firstname`" /> 
    </class> 
</hibernate-mapping> 

şu şekilde görünecektir My sorgusu:

SELECT * 
FROM tbl_externalfiles 
WHERE KeyValue = @p0 
AND CDKey = @p1 
AND DocType = @p2 

@p0 = 29, @p1 = 'WN', @p2 = 4 

Yani için 3 parametre vermek zorunda çanta fr Dış dosyalara om kişiler,

1: kişinin ConnectionID

2: 'TD'nin' < - hep aynı (anahtar)

3: 4 < - hep aynı (tür)

Birçoğuna birleşik bir kimliğe eşleştirdiğimde bu çalışır, ancak bu durumda bunu kullanamıyorum.

Burada bir torba bile mümkün mü? Sorgulamak için bir ölçüt kullandığım ExternalFiles'ı almak için fazladan bir sorgu kullanmalı mıyım?

DÜZENLEME:

Ben sadece connectionId

<bag name="Files" lazy="false"> 
    <key column="KeyValue" property-ref="ConnectionId"/> 
    <one-to-many class="ExternalFile" /> 
</bag> 

için aşağıdakileri yapabilirsiniz biliyorum Ama orada lutfen içinde Tipi ve Anahtar parametrelerin nasıl bilmiyorum.

Teşekkür

cevap

13

bu

<bag name="Files" lazy="false" where="DocType = '4' AND CDKey = 'WN'"> 
     <key column="KeyValue" property-ref="ConnectionId" /> 
     <one-to-many class="ExternalFile" /> 
    </bag> 
+0

İşleri mükemmel deneyin! Teşekkürler. –

+0

Harika! Bunu düşünmedim bile. –