कोड - सी #, nhibernate, Azure द्वारा मैपिंग का उपयोग कर NHibernate में कई से अधिक संबंध

NHibernate में कोडिंग द्वारा मैपिंग नामक एक प्रणाली है जो डेवलपर को कोड में अपने डेटाबेस को मैप करने की संभावना देता है (जैसा कि नाम कहता है)। मैं NHibernate 3.3.1 का उपयोग कर रहा हूं।

मैंने इसे दो वर्गों के लिए किया है: "गबरुइकर" और "लिजस्ट"। वे दोनों की एक-एक सूची है, इसलिए यह एक से कई संबंधों का एक उत्कृष्ट उदाहरण है।

मैपिंग इस प्रकार है:

Gebruiker

        Set(l => l.Lijsten, map =>
{
map.Table("LijstGebruiker");
map.Cascade(Cascade.All);
map.Inverse(true);
map.Key(k => k.Column("Gebruiker"));
}, map => map.ManyToMany(p => p.Column("Lijst")));

Lijst

         Set(l => l.Gebruikers, map =>
{
map.Table("LijstGebruiker");
map.Cascade(Cascade.All);
map.Key(k => k.Column("Lijst"));
}, map => map.ManyToMany(p => p.Column("Gebruiker")));

जहां तक ​​मुझे पता है कि यह तालिका Gibruiker और Key वाले कॉलम "LijstGebruiker" में परिणामित होनी चाहिए।

इसके बजाय: NHibernate तीन स्तंभों के साथ एक तालिका LijstGebruiker बनाता है, दो अपेक्षित लोगों के अतिरिक्त एक अतिरिक्त: elt। एल्ट एक विदेशी कुंजी का उपयोग करके लिजस्ट को भी संदर्भित करता है।

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

उत्तर:

जवाब के लिए 2 № 1

जाहिरा तौर पर, यह कुछ प्रकार का अजीब व्यवहार है जो तब होता है जब स्तंभ नाम वर्ग नाम के बराबर होता है। आपके कोड द्वारा बनाई गई मैपिंग है:

Gebruiker

<set name="Lijsten" table="LijstGebruiker" inverse="true" cascade="all">
<key column="Gebruiker" />
<many-to-many class="Lijst" />
</set>

Lijst

<set name="Gebruikers" table="LijstGebruiker" cascade="all">
<key column="Lijst" />
<many-to-many class="Gebruiker" />
</set>

तो, कोई कॉलम नहीं है many-to-many तत्व। यह NHibernate में एक बग हो सकता है।

यदि आप कॉलम का नाम बदलते हैं Gebruiker_id तथा Lijst_id तो सब कुछ ठीक काम करता है।

एक और उपाय है कि कॉलम नाम का उपयोग कई कॉलम परिभाषा विधि निर्दिष्ट करें:

Gebruiker

Set(l => l.Lijsten, map =>
{
map.Table("LijstGebruiker");
map.Cascade(Cascade.All);
map.Inverse(true);
map.Key(k => k.Column("Gebruiker"));
}, map => map.ManyToMany(p =>
{
p.Columns(x => x.Name("Lijst"));
}));

Lijst

Set(l => l.Gebruikers, map =>
{
map.Table("LijstGebruiker");
map.Cascade(Cascade.All);
map.Key(k => k.Column("Lijst"));
}, map => map.ManyToMany(p =>
{
p.Columns(x => x.Name("Gebruiker"));
}));

कोड द्वारा उत्पन्न मानचित्रण है:

<set name="Lijsten" table="LijstGebruiker" inverse="true" cascade="all">
<key column="Gebruiker" />
<many-to-many class="Lijst">
<column name="Lijst" />
</many-to-many>
</set>

<set name="Gebruikers" table="LijstGebruiker" cascade="all">
<key column="Lijst" />
<many-to-many class="Gebruiker">
<column name="Gebruiker" />
</many-to-many>
</set>

संबंधित सवाल
सबसे लोकप्रिय