2011-09-22 11 views
5

में किसी अन्य ऑब्जेक्ट के साथ संघर्ष करते हैं डेटाबेस में परिवर्तन सफलतापूर्वक किए गए थे, लेकिन ऑब्जेक्ट संदर्भ को अद्यतन करते समय एक त्रुटि हुई। ऑब्जेक्ट कॉन्टेक्स्ट एक असंगत स्थिति में हो सकता है। आंतरिक अपवाद संदेश: AcceptChanges जारी नहीं रह सकता क्योंकि ऑब्जेक्ट के प्रमुख मान ऑब्जेक्टस्टेट प्रबंधक में किसी अन्य ऑब्जेक्ट के साथ संघर्ष करते हैं। सुनिश्चित करें कि AcceptChanges को कॉल करने से पहले महत्वपूर्ण मान अद्वितीय हैं।AcceptChanges जारी नहीं रह सकता क्योंकि ऑब्जेक्ट के प्रमुख मान ऑब्जेक्टस्टेटमेनर

क्या त्रुटि संदेश मुझे मिलता है। यहाँ दो कार्यों मैं का उपयोग करें ... हैं

public IList<string> GenerateVersions(decimal id, decimal fId, string folderName, string filename, string objFile) 
    { 
     List<string> generatedFiles = new List<string>(); 

     foreach (var tCmdSets in db.IMG_SETTINGS_CMDSETS.Where("it.SETTINGS_FOLDER_ID = @folderid", new ObjectParameter("folderid", id))) 
     { 
      var strDestinationPath = ImageResizer.Util.PathUtils.RemoveExtension(Path.Combine(tmpDefaultFolder, tCmdSets.SETTINGS_CMDSET_DESTINATION, filename)); 
      ResizeSettings objResizeCommand = new ResizeSettings(tCmdSets.SETTINGS_CMDSET_COMMAND); 

      var strCreatedFile = ImageBuilder.Current.Build(objFile, strDestinationPath, objResizeCommand, false, true); 
      generatedFiles.Add("### File created: (" + folderName + " » " + tCmdSets.SETTINGS_CMDSET_NAME + " ») " + Path.GetFileName(strCreatedFile)); 

      IMG_UPLOAD_GENERATED_FILES tObjGenerated = new IMG_UPLOAD_GENERATED_FILES(); 

      tObjGenerated.UPLOAD_GENERATED_FILE_NAME = Path.GetFileName(strCreatedFile); 
      tObjGenerated.UPLOAD_GENERATED_PATH = Path.GetDirectoryName(strCreatedFile); 
      tObjGenerated.SETTINGS_CMDSET_ID = tCmdSets.SETTINGS_CMDSET_ID; 
      tObjGenerated.UPLOAD_FILE_ID = fId; 

      dbHandler.IMG_UPLOAD_GENERATED_FILES.AddObject(tObjGenerated); 
      dbHandler.SaveChanges(); 
     } 
     return generatedFiles; 
    } 

    public ActionResult UploadBulkFiles(decimal id) 
    { 
     IMG_SETTINGS_FOLDERS img_settings_folders = db.IMG_SETTINGS_FOLDERS.Single(i => i.SETTINGS_FOLDER_ID == id); 
     string strBulkDirectory = Path.Combine(tmpDefaultFolder, img_settings_folders.SETTINGS_FOLDER_BULK); 
     string[] objFiles = Directory.GetFiles(strBulkDirectory); 
     List<string> lstOuput = new List<string>(); 

     foreach (var tFile in objFiles) 
     { 
      System.IO.File.Move(tFile, Path.Combine(tmpDefaultFolder, "masters", img_settings_folders.SETTINGS_FOLDER_NAME, Path.GetFileName(tFile))); 

      lstOuput.Add("### File moved to masters (" + img_settings_folders.SETTINGS_FOLDER_NAME + " ») " + Path.GetFileName(tFile)); 

      IMG_UPLOAD_FILES tObjUploadedFile = new IMG_UPLOAD_FILES(); 

      tObjUploadedFile.UPLOAD_FILE_NAME = Path.GetFileName(tFile); 
      tObjUploadedFile.SETTINGS_FOLDER_ID = img_settings_folders.SETTINGS_FOLDER_ID; 

      dbHandler.IMG_UPLOAD_FILES.AddObject(tObjUploadedFile); 
      dbHandler.SaveChanges(); 

      var objGeneratedFiles = GenerateVersions(img_settings_folders.SETTINGS_FOLDER_ID,tObjUploadedFile.UPLOAD_FILE_ID, img_settings_folders.SETTINGS_FOLDER_NAME, Path.GetFileName(tFile), Path.Combine(tmpDefaultFolder, "masters", img_settings_folders.SETTINGS_FOLDER_NAME, Path.GetFileName(tFile))); 
      lstOuput.AddRange(objGeneratedFiles); 
     } 
     if (lstOuput.Count > 0) 
     { 
      return PartialView("UploadSingleFile", lstOuput); 
     } 
     else 
     { 
      return PartialView("NoUploads"); 
     } 
    } 

डेटा मॉडल

IMG_UPLOAD_FILE

  • UPLOAD_FILE_ID (पी)
  • UPLOAD_FILE_NAME
  • SETTINGS_FOLDER_ID

IMG_UPLOAD_GENER ATED_FILES

  • UPLOAD_GENERATED_FILE_ID (पी)
  • UPLOAD_GENERATED_FILE_NAME
  • UPLOAD_GENERATED_FILE_PATH
  • SETTINGS_CMDSET_ID
  • UPLOAD_FILE_ID
+0

आपके प्रश्न का उत्तर के लिए इस विषय http://stackoverflow.com/questions/3011764/autonumber-with-entity-framework –

उत्तर

3
निकटतम मैं एक जवाब पाने के लिए आ सकते हैं

है:

क्योंकि ORAC le "ऑटो आइडेंट" मान बनाने के लिए अनुक्रम + ट्रिगर का उपयोग करता है, ऐसा लगता है कि जब इकाई ढांचा एक वस्तु को सहेजता है, तो उसे वापस सहेजता है, मान वापसी अभी भी 0 है, क्योंकि ट्रिगर/अनुक्रम ने इसे अभी तक अपडेट नहीं किया है।

0 संख्या के कारण, ऑब्जेक्ट मैनेजर सोचेंगे कि 0 की इकाई कुंजी वाले एकाधिक ऑब्जेक्ट्स संघर्ष में हैं।

मेरे पास "बुलेट प्रूफ" समाधान नहीं हैं, लेकिन मैंने इसे हल करने के लिए अपने समाधानों को फिर से लिखा है।

\ टी

+0

मैं अब एक ही समस्या है, तुम ऐसा कैसे हल किया पढ़ें? – Elaine

+1

यह "बुलेट प्रूफ" समाधान नहीं है लेकिन तूफान तूफान समाधान है। आपने मेरा दिन बना दिया। मैं शब्दों में अपनी खुशी व्यक्त नहीं कर सकता। आज मेरे प्रोजेक्ट सबमिशन का अंतिम कोने था। और आपके विचार के साथ समाधान मिला। अल्लाह सर्वशक्तिमान आपको आशीर्वाद दे सकता है। –

0

यह आपकी समस्या से संबंधित नहीं किया जा सकता है, लेकिन मैं एक ajax प्रबंधक चल रहा है जब तक मैं इस किया था के साथ एक वेब पेज पर इस समस्या हो रही थी:

... 
    private static _objectContext; 
    protected void Page_Init(object sender, EventArgs e) 
    { 
     _objectContext = new ObjectContext(); 
    } 
    ... 
    protected void _ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e) 
    { 
     e.Context = _objectContext; 
    } 

    protected void _ContextDisposing(object sender, EntityDataSourceContextDisposingEventArgs e) 
    { 
     e.Cancel = true; 
    } 

Page_Load में ObjectContext बनाना जब पोस्टबैक नहीं हुआ तो मेरे लिए बहुत अपवाद हुआ।

2

मेरे पास ओरेकल डेटाबेस के आधार पर एंटीटी मॉडल के साथ सटीक वही परिदृश्य था। पहचान का कार्यान्वयन ट्रिगर द्वारा किया जाता है ताकि मॉडल में टेबल जोड़ते समय यह पहचान कॉलम की StoreGenertedPattern प्रॉपर्टी को पहचान में सेट न करे क्योंकि यह पता नहीं है कि यह कॉलम पहचान है।

मॉडल संपादक खोलने की आवश्यकता है, मॉडल में इकाई का पता लगाएं, कुंजी कॉलम पर क्लिक करें और StoreGenertedPattern प्रॉपर्टी को मैन्युअल रूप से 'पहचान' पर सेट करें।