क्या डेटाबेस द्वारा प्रबंधित कक्षा ऑटो वृद्धि की पूर्णांक संपत्ति हो सकती है लेकिन प्राथमिक कुंजी नहीं है (या आईडी को एनबीबर्ननेट उन्हें संदर्भित करता है)? मुझे यह कैसे करना है इसके उदाहरण खोजने में परेशानी हो रही है। किसी भी सहायता की सराहना की जाएगी। धन्यवाद।धाराप्रवाह निबर्ननेट ऑटो वृद्धि नॉन कुंजी (आईडी) संपत्ति
उत्तर
दो विकल्प।
यदि डेटाबेस इस तुम सिर्फ NHibernate बताने के लिए है कि संपत्ति उत्पन्न होता है और किसी भी अद्यतन/isnerts में शामिल करने की जरूरत नहीं है के लिए 100% जिम्मेदार है। नकारात्मकता यह है कि एनएच को स्मृति में ताजा मूल्य रखने के लिए अतिरिक्त चयन करने की आवश्यकता होगी।
< संपत्ति नाम = "फू" = "हमेशा" अद्यतन = "false" डालने उत्पन्न = "false" />
यदि डेटाबेस ज़िम्मेदार नहीं है और तुम सिर्फ यह अपने आप आपके कर सकते हैं किया है चाहता हूँ किसी प्रविष्टि पर मान को 1 पर सेट करने के लिए एक इंटरसेप्टर का उपयोग करें और इसे अद्यतन पर 1 तक बढ़ाएं।
http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors (11,1 - Interceptors)
आप OnSave() संपत्ति खोजने के लिए और प्रारंभिक मूल्य निर्धारित करने के लिए ओवरराइड कर देगा और उसके बाद OnFlushDirty ओवरराइड() संपत्ति संपत्ति और वेतन वृद्धि खोजने के लिए।
संपादित करें:
मैं एक बेवकूफ हूँ, नोटिस नहीं किया था आप धाराप्रवाह NHibernate कहा।
# 2 संपादित करें:
मुझे लगता है कि आप भी एक संस्करण के रूप में इस स्तंभ का उपयोग में रुचि हो सकती?
< version name="Foo" generated="always" />
यह मेरे लिए काम करता है:
public class Potato
{
public virtual Guid Id { get; protected set; }
public virtual int LegacyId { get; protected set; }
}
public class PotatoMap : ClassMap<Potato>
{
public PotatoMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.LegacyId).CustomSqlType("INT IDENTITY(1,1)").Not.Nullable().ReadOnly().Generated.Insert();
}
}
असल में, पूर्णांक डेटाबेस द्वारा उत्पन्न होना तय है और NHibernate आवेषण पर इसे पुनः प्राप्त करने के निर्देश दिए है।
यह ध्यान रखना महत्वपूर्ण है कि मैपिंग उत्तर का केवल आधा है, और काम नहीं करेगा यदि कॉलम पहचान के रूप में नहीं बनाया गया है। कस्टम एसक्लटाइप स्कीमाएक्सपोर्ट के साथ तालिकाओं को उत्पन्न करते समय उचित एसक्यूएल बनाने के उद्देश्य से मैपिंग में जोड़ा गया है। यह उत्पन्न एसक्यूएल है:
create table [Potato] (
Id UNIQUEIDENTIFIER not null,
LegacyId INT IDENTITY(1,1) not null,
primary key (Id)
)
दूसरी ओर, केवल पठनीय और Generated.Insert() NHibernate बता देंगे कि मूल्य केवल आवेषण पर डेटाबेस से स्वतः जेनरेट की है, और इसलिए इसके लिए डेटाबेस क्वेरी करने के लिए है प्रत्येक डालने पर मूल्य।
ध्यान दें कि मैंने केवल एसक्यूएल सर्वर के साथ इसका परीक्षण किया है। कस्टम प्रकार शायद अन्य डेटाबेस में उपलब्ध होगा या उपलब्ध नहीं होगा।
- 1. धाराप्रवाह निबर्ननेट
- 2. ऑटो वृद्धि कंपोजिट कुंजी InnoDB
- 3. डेटाटाइम धाराप्रवाह निबर्ननेट मैपिंग
- 4. कैसंड्रा कॉलम कुंजी ऑटो वृद्धि
- 5. सी # कक्षा ऑटो वृद्धि आईडी
- 6. एक-से-एक धाराप्रवाह निबर्ननेट?
- 7. GUID बनाम int आईडी ऑटो-वृद्धि
- 8. एच 2 डेटाबेस में ऑटो वृद्धि आईडी
- 9. धाराप्रवाह NHibernate - एक संपत्ति
- 10. एंड्रॉयड SQLite ऑटो वेतन वृद्धि
- 11. धाराप्रवाह निबर्ननेट r1.0 धाराप्रवाह मैपिंग अक्षम आलसी लोड
- 12. mysql लोड डेटा INFLE ऑटो-वृद्धि प्राथमिक कुंजी
- 13. MySQL: ऑटो वृद्धि
- 14. हेरोकू MySQL ऑटो वृद्धि
- 15. धाराप्रवाह निबर्ननेट समर्थित नहीं अपवाद newexpression
- 16. धाराप्रवाह NHibernate: संपत्ति
- 17. अगले ऑटो वृद्धि
- 18. सम्मिलित करें कि प्रतियां पंक्तियों और ऑटो वेतन वृद्धि गैर पहचान कुंजी आईडी स्तंभ
- 19. ऑटो-आईडी
- 20. धाराप्रवाह निबर्ननेट में तालिका में कैसे शामिल हों
- 21. mysql आईडी ऑटो increment 0
- 22. जेपीए: ओवरराइड ऑटो आईडी
- 23. धाराप्रवाह NHibernate automapping संपत्ति (अधिकतम)
- 24. Django: कस्टम पीके ऑटो-वृद्धि करना?
- 25. सी #, इकाई की रूपरेखा, ऑटो वेतन वृद्धि
- 26. पुश-अधिसूचना बैज ऑटो वृद्धि
- 27. ओरेकल - ऑटो वृद्धिशील आईडी
- 28. क्या एसक्लाइट में ऑटो वृद्धि हुई है?
- 29. धाराप्रवाह NHibernate HasMany विदेशी कुंजी मानचित्रण समस्या
- 30. MySQL - ऑटो इन्टरमेंट प्राथमिक कुंजी
चिंता न करें, यह लगभग वही है। मानचित्र (x => x.Foo)। केवल पढ़ने()।SetAttribute ("जेनरेट", "हमेशा"); सेटएट्रिब्यूट जेनरेटेड द्वारा प्रतिस्थापित किया जाएगा। हमेशा जब हम 1.0 दबाते हैं। –
मैंने नवीनतम एफएनएच डाउनलोड किया और पैरामीटर नहीं ले रहा है .Update() द्वारा उलझन में था। मुझे यकीन नहीं था कि मैपिंग में क्या होगा। केवल पढ़ने के लिए() समझ में आता है। – anonymous