मैं वर्तमान में एंटिटी फ्रेमवर्क के नवीनतम संस्करण का उपयोग कर एक प्रोजेक्ट पर काम कर रहा हूं और मैं एक ऐसे मुद्दे पर आया हूं जिसे मैं हल नहीं कर सकता।इकाई ढांचे, संबंधित वस्तुओं को अद्यतन करने में समस्याएं
जब मौजूदा ऑब्जेक्ट्स को अपडेट करने की बात आती है, तो मैं किसी ऑब्जेक्ट गुणों को ठीक से अपडेट कर सकता हूं, जब तक कि किसी अन्य वर्ग का संदर्भ न हो।
नीचे दिए गए उदाहरण में मैं एक वर्ग फू कहा जाता है, जो विभिन्न गुण संग्रहीत करता है, अन्य वर्गों
public class Foo
{
public int Id {get; set;}
public string Name {get; set;}
public SubFoo SubFoo {get; set}
public AnotherSubFoo AnotherSubFoo {get; set}
}
के इन किया जा रहा है उदाहरणों में से 2 के साथ है जब मैं नीचे दी गई विधि संपादन का उपयोग, मैं वस्तु में पारित मैं अपडेट करना चाहते हैं और मैं नाम को सही तरीके से अपडेट करने के लिए प्रबंधित कर सकता हूं, हालांकि मैंने सबफू को बदलने के लिए एक तरीका खोजने में कामयाब नहीं रहा है। उदाहरण के लिए, यदि सबफू क्लास में नाम की संपत्ति है, और यह बदल दिया गया है और मेरे डीबी और न्यूफू के बीच अलग है, तो यह अपडेट नहीं होता है।
public Foo Edit(Foo newFoo)
{
var dbFoo = context.Foo
.Include(x => x.SubFoo)
.Include(x => x.AnotherSubFoo)
.Single(c => c.Id == newFoo.Id);
var entry = context.Entry<Foo>(dbFoo);
entry.OriginalValues.SetValues(dbFoo);
entry.CurrentValues.SetValues(newFoo);
context.SaveChanges();
return newFoo;
}
कोई भी मदद या पॉइंटर्स की सराहना की जाएगी।
अद्यतन: Slauma द्वारा टिप्पणी के आधार पर मैं
public Foo Edit(Foo newFoo)
{
var dbFoo = context.Foo
.Include(x => x.SubFoo)
.Include(x => x.AnotherSubFoo)
.Single(c => c.Id == newFoo.Id);
context.Entry(dbFoo).CurrentValues.SetValues(newFoo);
context.Entry(dbFoo.SubFoo).CurrentValues.SetValues(newFoo.SubFoo);
context.SaveChanges();
return newFoo;
}
करने के लिए अपने विधि को संशोधित किया है जब इस चल रहा है, मैं त्रुटि
इकाई प्रकार Collection`1 हिस्सा नहीं है मिल वर्तमान संदर्भ के लिए मॉडल का।
कोशिश करते हैं और इस के आसपास पाने के लिए, मैं संदर्भ के लिए newFoo उपवर्गों संलग्न करने के लिए प्रयास करने के लिए कोड जोड़ा है, लेकिन यह एक त्रुटि के माध्यम से कह रही है कि ObjectManager पहले से ही एक ही
एक वस्तु एक इकाई था ऑब्जेक्टस्टेट प्रबंधक में एक ही कुंजी पहले से मौजूद है। ObjectStateManager, एक ही कुंजी
धन्यवाद कॉल कर सकते हैं, मैं अपने प्रश्न – Thewads
@Thewads में एक अद्यतन पोस्ट किया है: मैं केवल कल्पना कर सकते हैं कि आप इस "* संग्रह मिलता है ... नहीं है मॉडल का हिस्सा ... * "त्रुटि जब 'Foo.SubFoo' एक * संग्रह * प्रकार है। लेकिन यह केवल एक संदर्भ है 'सार्वजनिक सबफू सबफू {प्राप्त करें; सेट} 'अपने उदाहरण मॉडल में, संग्रह नहीं। क्या यह वास्तव में कोई संग्रह नहीं है? मेरा जवाब आपके वर्तमान मॉडल पर आधारित था जहां 'सबफू' संग्रह नहीं है। – Slauma
क्षमा करें, मुझे एहसास नहीं हुआ कि संग्रह वाले मॉडल में कोई फर्क पड़ता है ... मेरी गलती। मॉडल में मैं इसके साथ काम कर रहा हूं: सार्वजनिक आईसीलेक्शन सबफू {प्राप्त करें; सेट;} –
Thewads