5

में डेटा प्रविष्टियों को सहेजता नहीं है सबसे पहले मुझे यह उल्लेख करना चाहिए कि यह समस्या केवल विंडोज़ फॉर्म अनुप्रयोगों और वेब मोड में एक ही प्रोग्राम में होती है उदाहरण के लिए एमवीसी 3 सही काम करता है।इकाई फ्रेमवर्क डेटाबेस

कुछ दिन पहले मैंने एक एसक्यूएल एक्सप्रेस डेटाबेस के साथ विजुअल स्टूडियो 2010 परम का उपयोग करके एक बहुत ही सरल विंडोज फॉर्म प्रोग्राम लिखा था। मैंने इस डेटाबेस के आधार पर जोड़ें> नया आइटम> सेवा-आधारित डेटाबेस और एक इकाई डेटा मॉडल चुनकर डेटाबेस जोड़ा। मैंने तालिकाओं में कुछ नए रिकॉर्ड जोड़ने के लिए इकाई ढांचे का उपयोग किया। मैंने बिना किसी समस्या के पहले वीएस 2008 एसपी 1 के साथ ऐसी चीज की थी इसलिए मैंने वही किया। प्रोग्राम संकलित और बिना किसी त्रुटि के भाग गया और मैंने कुछ नया डेटा दर्ज किया। कार्यक्रम से बाहर निकलने के बाद मैं डेटाबेस में वापस आया और कुछ भी नहीं हुआ था। मैंने जो भी जानकारी दर्ज की थी, उसे सहेजा नहीं गया था। मैंने चरण-दर-चरण कार्यक्रम को डीबग किया और सब कुछ ठीक था। नीचे दिया गया कोड उल्लिखित समस्या के साथ एक बहुत ही सरल कार्यक्रम से संबंधित है। डाटाबेस में एक टेबल (पुस्तक) है:

namespace Book 
{ 
    public partial class BookForm : Form 
    { 
     BookDatabaseEntities db = new BookDatabaseEntities(); 

     public BookForm() 
     { 
      InitializeComponent(); 
     } 

     private void saveButton_Click(object sender, EventArgs e) 
     { 
      Book bookToCreate = new Book(); 

      bookToCreate.Id = Guid.NewGuid(); 
      bookToCreate.Title = titleTextBox.Text; 

      db.Books.AddObject(bookToCreate); 
      db.SaveChanges(); 
     } 
    } 
} 

यदि कोई मेरी मदद करता है तो मैं बहुत आभारी रहूंगा। अग्रिम में धन्यवाद।

.................

संपादन के बाद:

namespace Book 
{ 
    public partial class BookForm : Form 
    { 
     //BookDatabaseEntities db = new BookDatabaseEntities(); 

     public BookForm() 
     { 
      InitializeComponent(); 
     } 

     private void saveButton_Click(object sender, EventArgs e) 
     { 
      var db = new BookDatabaseEntities(); 
      var bookToCreate = db.Books.CreateObject(); 

      //Book bookToCreate = new Book(); 

      bookToCreate.Id = Guid.NewGuid(); 
      bookToCreate.Title = titleTextBox.Text; 

      db.AcceptAllChanges(); 
      db.Books.AddObject(bookToCreate); 
      db.SaveChanges(); 
     } 
    } 
} 
+0

को बदलने के लिए कोशिश देख सकते हैं "नई db.Books();" "db.Books.CreateObject();" –

+0

सुनिश्चित करें कि आप सही डेटाबेस की जांच कर रहे हैं। –

+0

@ डेवाइड: मैंने CreateObject का उपयोग किया जैसा आपने कहा था लेकिन समस्या अभी भी मौजूद है। – Monoloox

उत्तर

4

अंत में खोज और पूछ के बहुत सारे के बाद मैं पैट्रिस स्क्राइब के लिए MSDN मंचों धन्यवाद में समाधान नहीं मिला आप इसे here

+0

धन्यवाद Monoloox. अंत में लंबी खोज के बाद मुझे आप से जवाब मिला। –

1

इस प्रयास करें:

db.Attach(bookToCreate); 
db.SaveChanges(); 

संपादित करें:

मेरे पास यह कोड क्लास लाइब्रेरी (मेरा डीएएल) में उत्पादन में है और यह ठीक काम करता है:

using (var dbContext = new DbEntities()) 
    { 
     var job = dbContext.RiskToolJob.CreateObject(); 

     job.AnalysisDataID = analysisDataID; 

     job.JobRmsAnalysisID = RMSAnalysisID; 
     job.UserName = userName; 

     job.JobCreated = DateTime.UtcNow; 

     dbContext.RiskToolJob.AddObject(job); 

     dbContext.SaveChanges(); 

     return job.DataId; 
    } 

सूचना है कि वास्तव में मैं पीके (DataId) असाइन नहीं करते क्योंकि यह डेटाबेस से आवंटित किया जाएगा, मैं यह फोन करने वाले तो जो बचाने विधि निरस्त कर दिया है करने के लिए वापस पता करने के लिए स्वचालित रूप से जेनरेट हो जाता है आईडी, अगर इसकी जरूरत है।

+0

प्रिय डेविड के अंत में जोड़ा ... मैंने जो कहा वह मैंने किया लेकिन परिणाम अभी भी वही है। मुझे लगता है कि समस्या SaveChanges() विधि के बारे में है क्योंकि (db.Books.AddObject) या (db.Books.Attach) निष्पादित करने के बाद ऑब्जेक्ट को ऑब्जेक्टस्टेट प्रबंधक में जोड़ा गया है और ऐसा लगता है कि SaveChanges इसे डेटाबेस में सहेजने में असमर्थ है। हालांकि यह प्रवेश प्रक्रिया – Monoloox

+0

के दौरान कोई त्रुटि नहीं रिपोर्ट करता है .. एक और बात .. जैसा कि मैंने कहा था कि जब मैं वेब फॉर्म या एमवीसी में एक ही कोड लिखता हूं तो यह इस समस्या के बिना काम करता है। यह केवल विंडोज़ फॉर्म ऐप्स में होता है और मुझे नहीं पता कि क्यों। – Monoloox

+0

डेविड क्यों डीबी.एटच मदद करेगा? एमएस डॉक्स से - "db.Attach का उपयोग किसी ऐसे इकाई के साथ एक संदर्भ को दोबारा करने के लिए किया जाता है जो डेटाबेस में पहले से मौजूद है। इसलिए सहेजेंChanges डेटाबेस में संलग्न इकाई को सम्मिलित करने का प्रयास नहीं करेगा क्योंकि यह पहले से ही वहां है" – Izzy

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