2012-09-07 27 views
9

पर मैं एक विरासत डेटाबेस के साथ काम कर रहा हूँ, और मैं निम्न तालिकाओं है:NHibernate मानचित्रण कई लोगों के लिए एक नहीं प्राथमिक कुंजी

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

एक निजी अनेक बाह्य फ़ाइलों है।

उदाहरण दिया:

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 

मैं तो एक उपयोगकर्ता ExternalFiles का एक बैग है कि इस नक्शा कर सकते हैं?

मेरे 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> 

व्यक्ति:

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

मेरे प्रश्न इस प्रकार दिखाई देगा:

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

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

तो मैं करने के लिए 3 मानकों देना है बैग फ्र बाहरी फ़ाइलों के लिए ओम व्यक्तियों,

1: व्यक्ति की ConnectionID

2: 'WN' < - हमेशा एक ही (कुंजी)

3: 4 < - हमेशा एक ही (प्रकार)

कई लोगों पर यह एक काम करता है जब मैं एक समग्र आईडी पर मैप करता हूं, लेकिन मैं इस मामले में इसका उपयोग नहीं कर सकता।

क्या कोई बैग यहां भी संभव है? क्या मुझे अपने बाहरी फाइलों को लाने के लिए एक अतिरिक्त क्वेरी का उपयोग करना चाहिए जहां मैं क्वेरी के मानदंड का उपयोग करता हूं।

संपादित करें:

मैं जानता हूँ कि मैं केवल connectionId

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

के लिए निम्न कर सकते हैं लेकिन मैं कैसे वहाँ अच्छी तरह से में टाइप करें और कुंजी पैरामीटर प्राप्त करने के लिए पता नहीं है।

धन्यवाद

उत्तर

13

इस

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

वर्क्स सही कोशिश करो! धन्यवाद। –

+0

बहुत बढ़िया! मैंने इसके बारे में भी नहीं सोचा था। –