2009-05-19 10 views
9

को मैं इसधाराप्रवाह NHibernate मानचित्र 2 टेबल एक वर्ग

table Employees 
EmployeeID 
EmployeeLogin 
EmployeeCustID 

table Customers 
CustomerID 
CustomerName 

की तरह एक तालिका संरचना कुछ मैं चाहते हैं क्या है एक ही वर्ग के लिए ऊपर संरचना नामित मैप करने के लिए है मैं धाराप्रवाह निबर्ननेट के साथ ऐसा कैसे करूं?

उत्तर

4

अगर यह धाराप्रवाह के साथ संभव है मैं नहीं जानता, लेकिन एक्सएमएल में शामिल होने का उपयोग तत्व:

सरलीकृत:

<class name="Employee" table="Customers" > 
    <id name="CustomerID" .../> 

    <property name="CustomerName"/> 

    <join table="Employees"> 
    <key column="EmployeeCustID" /> 
    <property name="EmployeeLogin" /> 
    </join> 

</class> 

इस post by Ayende

+0

हाय, आप सही हैं कि आप ग्राहक तालिका से जुड़ सकते हैं, लेकिन मैं इसे दूसरी तरफ करना चाहूंगा। कर्मचारी तालिका का उपयोग करना और ग्राहक तालिका में शामिल होना, हालांकि परिणामस्वरूप सही आईडी पर शामिल होना असंभव है क्योंकि ग्राहकों की तालिका में विदेशी कुंजी नहीं है। –

+0

आप इसे अलग क्यों करना चाहेंगे? फर्क पड़ता है क्या? मैपिंग में यह केवल यही तरीका है। आप इसे कक्षाओं और न ही टेबल में नहीं देखते हैं। तो क्या? –

+6

फ्लुएंट में आप WithTable ("2ndTableName", m => {/ * 2 टेबल मैपिंग * /) का उपयोग करेंगे; –

0

क्या कर्मचारी कस्टिड अद्वितीय है? यदि नहीं, तो यह कभी भी काम नहीं करेगा, क्योंकि आप दो अलग-अलग इकाई प्रकारों को 1 में घुमाने की कोशिश करते हैं। साथ ही, अपनी संरचना के साथ, आप एक उदाहरण कैसे सहेजना चाहते हैं? -> ग्राहक आईडी ज्ञात नहीं है, इसलिए आप ऐसी इकाई को सहेज नहीं सकते हैं।

आईएमएचओ कर्मचारी को केवल संबंधित इकाई के रूप में रखने के लिए बेहतर है, जैसा कि (मुझे लगता है) कर्मचारी कस्टिड का उपयोग किसी कर्मचारी इकाई को कर्मचारी इकाई से जोड़ने के लिए किया जाता है यदि कर्मचारी भी ग्राहक है, जिसका अर्थ है 'ग्राहक' केवल कर्मचारी के लिए एक भूमिका और इसलिए वैकल्पिक और परिवर्तनीय और इस प्रकार एक अलग इकाई होना चाहिए।

1

मैं इस प्रयास नहीं किया है देखें चूंकि फ्लुएंट एनएचबर्ननेट 1.0 पर गया था इसलिए मेरा वाक्यविन्यास गलत हो सकता है। मुझे पूरा यकीन है कि यह केवल तभी काम करेगा यदि Customer.CustomerIdEmployee पर एक विदेशी कुंजी है।

public class EmployeeMap : ClassMap<Employee> 
{ 
    public EmployeeMap() 
    { 
    Id(x => x.EmployeeId); 
    Map(x => x.EmployeeLogin); 

    Table("Customer", m => 
    { 
     m.Map(x => x.EmployeeName, "CustomerName"); 
    }); 
    } 
} 
+0

मैंने अभी एक और टिप्पणी पढ़ी है कि आप कर्मचारी के लिए एफके ग्राहक नहीं हैं, इसलिए यह संभवतः काम नहीं करेगा। – ddc0660

3

मैं ऊपर Frans से सहमत, लेकिन यदि आप किसी और के कोड के साथ फंस रहे हैं और मौजूदा संरचना का उपयोग करना, आप WithTable उपयोग कर सकते हैं कर सकते हैं।

public class EmployeesMap : ClassMap<Employees> 
{ 
    public EmployeesMap() 
    { 
     Id(x => x.EmployeeId); 
     Map(x => x.EmployeeLogin); 

     WithTable("Customers", join => 
      { 
       join.Map(m => m.EmployeeName, "CustomerName"); 
       join.WithKeyColumn("EmployeeCustID"); 
      }); 
    } 
} 

[DataContract(IsReference = true)] 
public class Employees 
{ 
    [DataMember] 
    public virtual int EmployeeId { get; set; } 

    [DataMember] 
    public virtual string EmployeeLogin { get; set; } 

    [DataMember] 
    public virtual string EmployeeName { get; set; } 
} 
+2

-1: यह काम नहीं करेगा। यह 'कर्मचारी। कर्मचारी' के साथ 'कर्मचारी। कर्मचारी' के साथ 'कर्मचारी। कर्मचारी' आईडी के साथ 'कर्मचारी। कर्मचारी आईडी 'में शामिल होने का प्रयास करेगा। ग्राहक। ग्राहक' आईडी '... –

संबंधित मुद्दे