2009-02-25 11 views
8

मैंने अपने डब्ल्यूपीएफ एप्लिकेशन में एक एमडीएफ डेटाबेस बनाया।मेरा सबमिटChanges() LINQ-to-SQL में क्यों काम नहीं कर रहा है?

तब मैंने LINQ-to-SQL कक्षाएं उत्पन्न कीं और LINQ का उपयोग सभी ग्राहकों को प्राप्त किया।

फिर मैं उनके माध्यम से भागता हूं और उनके प्रत्येक अंतिम नाम को बदलता हूं।

हालांकि, जब मैं SubmitChanges को कॉल करता हूं, डेटाबेस अपरिवर्तित रहता है।

मैंने सोचा था कि डेटाबेस में परिवर्तन सबमिट करने के लिए सबमिटChanges() का उद्देश्य था?

मुझे क्या याद आ रहा है, मैं अपने डेटाबेस में वापस "परिवर्तन सबमिट कैसे करूं?"

public Window1() 
{ 
    InitializeComponent(); 

    Main2DataContext _db = new Main2DataContext(); 
    var customers = from c in _db.Customers 
        select c; 

    foreach (var customer in customers) 
    { 
     customer.LastName = "CHANGED lastname"; //ListBox shows changes 
    } 

    _db.SubmitChanges(); //does NOT save to database (???) 

} 
+2

यह वास्तव में बेवकूफ सवाल है लेकिन आपके पास ग्राहक तालिका पर प्राथमिक कुंजी है? –

+0

हां: आईडी प्राथमिक कुंजी है, एनयूएलएल की अनुमति नहीं देती है, और पहचान विशिष्टता IsIdentity = Yes पर सेट है। मैंने विजुअल स्टूडियो के साथ एमडीएफ फाइल बनाई। –

उत्तर

15

मुझे लगता है कि मुझे पता है कि समस्या क्या है। क्या आप स्थानीय .mdf फ़ाइल का उपयोग कर रहे हैं? यदि ऐसा है, तो अपने बिन/डीबग फ़ोल्डर की जांच करें। मैं शर्त लगाता हूं कि आपके पास परिवर्तन के साथ डेटाबेस है। मुझे लगता है कि आपके पास अपनी परियोजना में एक .mdf फ़ाइल है जो आपके द्वारा बनाए जाने पर बिन/डीबग फ़ोल्डर में कॉपी हो रही है। इसलिए परिवर्तन प्रतिलिपि में सहेजे जा रहे हैं, और आप इसे प्रतिलिपि में प्रतिबिंबित नहीं कर रहे हैं जो आपकी परियोजना में सीधे रहता है।

+0

मैंने अभी इस के माध्यम से भाग लिया है और यह सही लगता है। एमडीएफ की बिन/डीबग प्रति संलग्न करें और आप परिवर्तन देखेंगे। –

+0

बिंगो, वह था! हर किसी को –

+0

की दृढ़ता की सराहना करते हैं, मुझे केवल इसलिए पता है क्योंकि मैंने पहले इसी चीज़ का पीछा करने में घंटों खर्च किए हैं। गैल्ड मैं मदद कर सकता था। – Micah

2

सुनिश्चित करें कि पुनर्प्राप्ति और परिवर्तन के बीच किसी भी बिंदु पर आपका _ डीबी किसी नए संदर्भ में रीसेट नहीं हो रहा है, यदि समस्या है तो यह ठीक है। इसके अलावा आप TheListBox.ItemsSource = _db.Customers; कर अपने डेटासोर्स के अपने असाइनमेंट को सरल बना सकते हैं। मेरे पास वर्तमान कोड में कई जगहें हैं जहां मैं वही कर रहा हूं जो आप वर्णन करते हैं और परिवर्तन ठीक से प्रचार कर रहे हैं। एक अतिरिक्त सुझाव, आपके संदर्भ पर सेटअप लॉगिंग (कुछ लेखक को _db.Log सेट करें, मैं आमतौर पर Console.Out का उपयोग करता हूं, इसलिए मैं डिबगिंग के दौरान आउटपुट विंडो में परिवर्तन देख सकता हूं) ताकि आप SubmitChanges() पर कॉल करते समय वास्तव में होने वाले परिवर्तन देख सकें।

+0

मैं _db.Log = Console.Out में डाल दिया; submitchanges लाइन से पहले, यह मेरे आउटपुट विंडो में नहीं दिखाता है, या इसे आउटपुट कहां माना जाता है? –

+0

ठीक है, मैंने अब कोड को अधिकतम रूप से सरल बना दिया है, यह केवल ऑब्जेक्ट्स प्राप्त करता है, उन्हें बदलता है और सबमिटChanges के साथ उन्हें वापस सहेजता है, लेकिन डेटाबेस अभी भी उन्हें नहीं बदलता है। कोई विचार क्यों यह मामला है? –

+0

क्या आप डीबग मोड में चल रहे हैं? क्या आपके पास उपकरण "> विकल्प-> डिबगिंग-> सामान्य में चेक किए गए" तत्काल विंडो में सभी आउटपुट विंडो टेक्स्ट को रीडायरेक्ट करें "विकल्प भी है? यदि ऐसा है तो आपका आउटपुट तत्काल विंडो पर जा रहा है, अन्यथा स्ट्रिंगबिल्डर के चारों ओर अपना स्वयं का टेक्स्टवाइटर सेट अप करने और लॉग सेट करने का प्रयास करें। –

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