क्या इकाई को केवल पढ़ने के लिए चिह्नित करने का कोई तरीका है और इसके लिए कोई कुंजी निर्दिष्ट नहीं है?इकाई फ्रेमवर्क कोड प्रथम रीडऑनली एंटिटी
उत्तर
कुछ ऐसी चीजें हैं जिन्हें आप कोड फर्स्ट में केवल पढ़ने के लिए लागू कर सकते हैं। जब आप क्वेरी करते हैं तो सबसे पहले AsNoTracking()
का उपयोग करना है।
var readOnlyPeople = (from p in context.People
where p.LastName == "Smith"
select p).AsNoTracking();
इस संहिता सबसे पहले बताता है इन संस्थाओं के लिए परिवर्तनों को ट्रैक नहीं करने के लिए, इसलिए जब आप SaveChanges()
कोई इन वस्तुओं में किए गए परिवर्तनों फोन कायम की जाएगी।
सीक्रॉन्ड चीज जो आप कर सकते हैं SaveChanges()
पर कॉल करने से पहले राज्य को Unchanged
पर सेट कर दिया गया है।
context.Entry(person).State = EntityState.Unchanged;
context.SaveChanges();
यह उस इकाई को किए गए किसी भी बदलाव को अनदेखा करने के लिए पहले कोड को बताता है।
जहां तक कोई कुंजी नहीं है, सभी इकाइयों के पास एक कुंजी होना चाहिए। यह आवश्यक रूप से डेटाबेस में प्राथमिक कुंजी के लिए मानचित्र नहीं हो सकता है, लेकिन यह "इकाई सेट के भीतर एक इकाई प्रकार उदाहरण को विशिष्ट रूप से पहचानना चाहिए"।
हाय ब्रिस, आपके सुझाव मेरे लिए आदर्श समाधान नहीं हैं (मैं वास्तव में केवल उस इकाई को केवल पढ़ने के लिए चिह्नित करना चाहता हूं - जो एनएच में मौजूद है) लेकिन मुझे नहीं लगता कि मैं अभी भी ईएफ में एक साफ समाधान के साथ क्या संभव हूं। "सभी संस्थाओं के पास एक कुंजी होना चाहिए", मैं आपके साथ सहमत हूं लेकिन कभी-कभी आपको कुछ विचारों के साथ काम करना पड़ता है और उनके पास कोई कुंजी नहीं होती है और अगर मैं केवल पढ़ने के रूप में एंटीटी को चिह्नित कर सकता हूं तो मुझे एक कुंजी क्यों चाहिए । – Otake
दरअसल आप यहां सुझाए गए आईसीएकेबलएन्टीटी इंटरफ़ेस के समान एक आईरेडऑनली एंटीटी मार्कर इंटरफ़ेस का उपयोग कर सकते हैं (इसमें ब्लॉग पोस्ट भी हैं जो मुझे मूल रूप से कोड मिला, लेकिन मुझे उन्हें नहीं मिला) http://stackoverflow.com/a/ 65 9 3261/34474 कुछ गॉचाचा उनके बीच संबंधों के साथ हैं जिन पर आपको विचार करना चाहिए (यदि कोई दिलचस्पी लेता है तो मुझे बताएं) अंत में हम ब्राइस ने केवल एक स्वचालित तरीके से सुझाव दिया है। – Cohen
यदि आपके विचार में प्राकृतिक कुंजी नहीं है, तो आप EntityFramework की सहायता के लिए एक जोड़ सकते हैं। दृश्य परिभाषा में: चयन \t NEWID() के रूप में [VirtualKey] ... एंटिटी के मानचित्र में: // प्राथमिक कुंजी this.HasKey (टी => t.VirtualKey); – Elton
ईएफ 6 में कोड-प्रथम का उपयोग करके, मैंने कुछ इकाइयां बनाईं जो दृश्यों को प्रतिबिंबित करती हैं, जो स्पष्ट रूप से संशोधित या सहेजी नहीं जानी चाहिए। से इकाई को रोकने के लिए बदला जा रहा है, मैं सेट गुण संरक्षित करते थे:
public class TransplantCenterView
{
public string TransplantsThisYear { get; protected set; }
}
इकाई की रूपरेखा अभी भी इस गुण सेट करने में सक्षम है, लेकिन अन्य डेवलपर्स गलती से एक संकलन समय त्रुटि के बिना यह नहीं कर सकते। यह बहुत अच्छा काम करता है, लेकिन ऐसा लगता है कि ट्रैकिंग पूरी तरह से खत्म करने के लिए बेहतर समाधान होगा। reggaeguitar's answer को
धन्यवाद, ऐसा लगता है इस का जवाब नहीं है (यह भी अपने जवाब ऊपर वोट करें यदि निम्न उपयोगी है) है, जो मुझ से मेरी कोड बदलने के लिए अनुमति दी गई है:
public class MyContext : DbContext
{
public DbSet<TransplantCenterVeiw> TransplantCenterViews {get; set;}
}
करने के लिए:
public class MyContext : DbContext
{
//appears the DbSet is still needed to make Set<Entity>() work
protected DbSet<TransplantCenterView> _transplantCenterViews {get; set;}
//this .AsNoTracking() disables tracking for our DbSet.
public DbQuery<TransplantCenterView> TransplantCenterViews {
get { return Set<TransplantCenterView>().AsNoTracking(); }
}
}
मैं इस के लिए किसी भी पक्ष-विपक्ष के बारे में पता नहीं है, लेकिन अपने मौजूदा कोड किसी भी hitches के बिना काम जारी रखा है, इसलिए एक जीत लगती है।
इकाई पर ट्रैकिंग अक्षम करने के तरीके के लिए मेरा उत्तर देखें। – reggaeguitar
देव _could_ अभी भी MyContext.Set
यदि आप चाहते हैं पूरी इकाई के लिए केवल पढ़ने के लिए जा आप इस
/// Using a dbquery since this is readonly.
/// </summary>
public DbQuery<State> States
{
get
{
// Don't track changes to query results
return Set<State>().AsNoTracking();
}
}
स्रोत http://www.adamtuliper.com/2012/12/read-only-entities-in-entity-framework.html
DbQuery को DbQuery में बदल दिया गया। ऊपर वर्णित गेटटर को बदल दिया। संकलित। सब अच्छा। हालांकि, जब मैं उस पृष्ठ को निष्पादित करने के लिए जाता हूं जो दृश्य से डेटा लोड करता है तो मुझे रनटाइम त्रुटि मिलती है: "इकाई प्रकार 'MyEntityName' वर्तमान संदर्भ के लिए मॉडल का हिस्सा नहीं है।" तो, जोड़ा 'सुरक्षित डीबीसेट
दिलचस्प, मुझे यह त्रुटि नहीं मिली। मैं टेबल पर मैपिंग कर रहा हूं और विचार नहीं, शायद यह अंतर है? – reggaeguitar
हम्म ... तो, आपके पास अपने संदर्भ में कहीं भी डीबीसेट
- 1. एंटिटी फ्रेमवर्क कोड प्रथम माइग्रेशन
- 2. इकाई फ्रेमवर्क कोड-प्रथम
- 3. कोड-प्रथम इकाई फ्रेमवर्क
- 4. इकाई फ्रेमवर्क कोड प्रथम MySQL Pluralizing टेबल्स
- 5. इकाई फ्रेमवर्क कोड प्रथम श्रेणी संबंध
- 6. संहिता प्रथम इकाई फ्रेमवर्क
- 7. कोड प्रथम इकाई फ्रेमवर्क - कनेक्शन स्ट्रिंग बदलें
- 8. इकाई फ्रेमवर्क कोड प्रथम और एकाधिक असेंबली
- 9. इकाई फ्रेमवर्क कोड प्रथम Azure कनेक्शन
- 10. इकाई फ्रेमवर्क कोड-प्रथम शून्य विदेशी कुंजी
- 11. नया कोड प्रथम इकाई फ्रेमवर्क डेटाबेस
- 12. एंटिटी फ्रेमवर्क कोड पहले
- 13. इकाई फ्रेमवर्क कोड प्रथम और डेटाबेस प्रथम बग/संघर्ष
- 14. इकाई फ्रेमवर्क - चाइल्ड एंटिटी
- 15. इकाई फ्रेमवर्क, कोड प्रथम और पूर्ण पाठ खोज
- 16. इकाई फ्रेमवर्क कोड की सूची प्रथम डिफ़ॉल्ट नामकरण सम्मेलन
- 17. कोड प्रथम इकाई फ्रेमवर्क 4: एसक्यूएल प्रमाणीकरण के साथ विफल
- 18. इकाई फ्रेमवर्क 4 कोड प्रथम और नया() ऑपरेटर
- 19. एंटीटी फ्रेमवर्क 4.1 कोड प्रथम
- 20. इकाई फ्रेमवर्क कोड पहले। प्राथमिक कुंजी
- 21. इकाई फ्रेमवर्क, कोड प्रथम मॉडलिंग और एक चक्रीय संदर्भ
- 22. इकाई फ्रेमवर्क कोड प्रथम और अमान्य ऑब्जेक्ट नाम त्रुटि
- 23. इकाई फ्रेमवर्क 4.1 कोड-प्रथम कुंजी एट्रिब्यूट गैर-पहचान कॉलम
- 24. इकाई फ्रेमवर्क कोड प्रथम डेटा माइग्रेशन वीएस2012 वेब परिनियोजन
- 25. इकाई फ्रेमवर्क - कोड प्रथम फ़्लुएंट एपीआई: त्रुटि संदेश?
- 26. इकाई फ्रेमवर्क कोड प्रथम और कनेक्शन स्ट्रिंग समस्या
- 27. कोड प्रथम इकाई फ्रेमवर्क (सी # एएसपी.नेट एमवीसी 3)
- 28. इकाई फ्रेमवर्क सीटीपी 5, कोड-प्रथम। वैकल्पिक नेविगेशन संपत्ति
- 29. इकाई फ्रेमवर्क कोड प्रथम - बदलें तालिका कॉलम संयोजन
- 30. इकाई फ्रेमवर्क कोड-प्रथम मुद्दे (SimpleMembership UserProfile तालिका)
कोड पहले कर सकते हैं और केवल पढ़ने के लिए एक तरह से परस्पर अनन्य हैं। जिज्ञासा से बाहर क्यों आप प्राथमिक कुंजी नहीं चाहते हैं? – Brian
एन्टीटी को एक दृश्य में मैप किया गया है और मैं इसे अपडेट/डालना नहीं चाहता हूं, इसके पास कोई भी कुंजी नहीं है। – Otake
ईएफ डिफ़ॉल्ट रूप से विचारों पर अपडेट नहीं करेगा। –