2011-09-22 10 views
5

Le modifiche al database sono state eseguite correttamente, ma si è verificato un errore durante l'aggiornamento del contesto dell'oggetto. ObjectContext potrebbe trovarsi in uno stato incoerente. Messaggio eccezione interna: AcceptChanges non può continuare perché i valori chiave dell'oggetto sono in conflitto con un altro oggetto in ObjectStateManager. Assicurarsi che i valori chiave siano univoci prima di chiamare AcceptChanges.AcceptChanges non può continuare perché i valori chiave dell'oggetto sono in conflitto con un altro oggetto in ObjectStateManager

È il messaggio di errore che ottengo. qui ci sono le due funzioni uso ...

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"); 
     } 
    } 

modello di dati

IMG_UPLOAD_FILE

  • UPLOAD_FILE_ID (PK)
  • UPLOAD_FILE_NAME
  • SETTINGS_FOLDER_ID

IMG_UPLOAD_GENER ATED_FILES

  • UPLOAD_GENERATED_FILE_ID (PK)
  • UPLOAD_GENERATED_FILE_NAME
  • UPLOAD_GENERATED_FILE_PATH
  • SETTINGS_CMDSET_ID
  • UPLOAD_FILE_ID
+0

Leggi questo argomento per rispondere alla tua domanda http://stackoverflow.com/questions/3011764/autonumber-with-entity-framework –

risposta

3

Il più vicino che posso venire a trovare una risposta è:

Perché Orac le usa un Sequence + Trigger per fare i valori di "Auto Ident", sembra che quando il framework di entità aggiunge un oggetto al suo salvataggio, il valore restituito è ancora 0, perché il trigger/la sequenza non l'hanno ancora aggiornato.

A causa del numero 0, ObjectMannager penserà che più oggetti con la chiave di entità 0 siano in conflitto.

Non ho una soluzione "a prova di proiettile", ma ho riscritto le mie soluzioni per gestirlo in un altro modo.

\ T

+0

Ho lo stesso problema ora, come avete risolto questo? – Elaine

+1

Questa non è una soluzione "a prova di proiettile" ma la soluzione Storm di Thundering. Hai reso la mia giornata. non posso esprimere la mia felicità a parole Oggi era l'angolo finale del mio progetto di sottomissione. E ho trovato la soluzione con la tua idea. Che Allah l'Onnipotente ti benedica. –

0

questo potrebbe non essere legato al tuo problema, ma mi è stato sempre questo problema su una pagina web con un gestore ajax esecuzione fino a quando ho fatto questo:

... 
    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; 
    } 

Creazione del ObjectContext in Page_Load quando non un postback ha causato quell'eccezione per me.

2

Ho avuto lo stesso identico scenario con Entity Model basato sul database Oracle. L'implementazione di Identity viene eseguita da trigger, quindi quando si aggiungono le tabelle al modello, non imposta la proprietà StoreGenertedPattern della colonna Identity su Identity poiché non si rende conto che questa colonna è identità.

È necessario aprire l'editor del modello, individuare l'entità nel modello, fare clic sulla colonna chiave e impostare manualmente la proprietà StoreGenertedPattern su "Identity".

Problemi correlati