2011-09-22 18 views
5

Los cambios en la base de datos se cometieron con éxito, pero un error al actualizar el contexto del objeto. ObjectContext podría estar en un estado incoherente. Mensaje de excepción interno: los cambios de aceptación no pueden continuar porque los valores de las claves del objeto entran en conflicto con otro objeto en ObjectStateManager. Asegúrese de que los valores de clave sean únicos antes de llamar a AcceptChanges.AcceptChanges no pueden continuar porque los valores clave de conflictos del objeto con otro objeto en el ObjectStateManager

Es el mensaje de error que recibo. aquí están las dos funciones que 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"); 
     } 
    } 

MODELO DE DATOS

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

Leer este tema para responder a su pregunta http://stackoverflow.com/questions/3011764/autonumber-with-entity-framework –

Respuesta

3

Lo más cerca que puedo llegar a encontrar una respuesta es:

Debido Orac le utiliza un Sequence + Trigger para hacer valores de "Auto Ident", parece que cuando el marco de entidad agrega un objeto en lo guarda, el valor devuelto sigue siendo 0, porque el desencadenador/secuencia aún no lo ha actualizado.

Debido al número 0, el ObjectMannager pensará que varios objetos con la clave de entidad de 0 están en conflicto.

que no tienen un "soluciones" a prueba de balas, pero han vuelto a escribir mis soluciones para manejar de otra manera.

\ T

+0

Tengo el mismo problema ahora, ¿cómo resolver esto? – Elaine

+1

Esta no es una solución "a prueba de balas", sino una solución Thundering Storm. Me has alegrado el día. no puedo expresar mi felicidad en palabras. Hoy fue la esquina final de mi submición de proyecto. Y obtuve la solución con tu idea. Que Allah el Todopoderoso te bendiga. –

0

Esto no podría estar relacionado con su problema, pero que estaba recibiendo este problema en una página web con un gestor de ajax en funcionamiento hasta que hice esto:

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

Creación de la ObjectContext en Page_Load cuando no una devolución de datos causó esa misma excepción para mí.

2

que tenían el mismo escenario exacto con el modelo de entidad sobre la base de base de datos Oracle. La implementación de Identity se realiza mediante el desencadenador, por lo que al agregar las tablas al modelo, no establece la propiedad StoreGenertedPattern de la columna de identidad en Identity, ya que no es consciente de que esta columna es identidad.

Hay una necesidad de abrir editor de modelos, localice la entidad en el modelo, haga clic en la columna de clave y establezca la propiedad StoreGenertedPattern a la 'identidad' de forma manual.

Cuestiones relacionadas