2012-06-08 28 views
6

estado mirando y no puedo entender lo que está mal.Se produjo un error al actualizar las entradas. Ver la excepción interna para más detalles. - Linq a la entidad

Actualmente estoy tratando de actualizar mi base de datos con una nueva puntuación más alta cuando el jugador muere. Pero sigue arrojándome esa excepción, sin importar lo que elija intentar y guardar.

Código:

HighScore hs = new HighScore(); 
      var id = from i in db.HighScores 
        orderby i.ID descending 
        select i; 
      int newId = 0; 

      if (id.Count() == 0) 
      { 
       newId = 1; 
      } 
      else 
      { 
       newId = id.First().ID + 1; 
      } 
     hs.ID = 6; //I just hardcoded in 6 to make sure i wasent because of the newId  //thing, and i have checked if theres already something on the sixths spot as well. 
      hs.UserHighscore = 100; 
      hs.HighscoreUsername = "test"; 
      hs.GameID = 1; 
      db.HighScores.AddObject(hs); 
      db.SaveChanges(); 

He comprobado una y otra vez, y simplemente parece que no puede averiguar cuál es el problema.

Cualquier ayuda se apruebe.

La excepción:

System.Data.UpdateException was unhandled 
    Message=An error occurred while updating the entries. See the inner exception for details. 
    Source=System.Data.Entity 
    StackTrace: 
     at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
     at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
     at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
     at System.Data.Objects.ObjectContext.SaveChanges() 
     at MatematikSpilMenu.SaveBunniesSceen.SaveHighscore() in MatematikSpilMenu\SaveBunniesSceen.cs:line 173 
     at MatematikSpilMenu.SaveBunniesSceen.Update(GameTime gameTime, Boolean otherScreenIsActive, Boolean coveredByOtherScreens) in C:\Users\Etarnalazure-Alien\documents\visual studio 2010\Projects\MatematikSpilMenu\MatematikSpilMenu\MatematikSpilMenu\SaveBunniesSceen.cs:line 110 
     at MatematikSpilMenu.ScreenManager.Update(GameTime gameTime) in MatematikSpilMenu\ScreenManager.cs:line 101 
     at Microsoft.Xna.Framework.Game.Update(GameTime gameTime) 
     at Microsoft.Xna.Framework.Game.Tick() 
     at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e) 
     at Microsoft.Xna.Framework.GameHost.OnIdle() 
     at Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame() 
     at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e) 
     at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.Run(Form mainForm) 
     at Microsoft.Xna.Framework.WindowsGameHost.Run() 
     at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 
     at Microsoft.Xna.Framework.Game.Run() 
     at MatematikSpilMenu.Program.Main() in MatematikSpilMenu\Game1.cs:line 120 
    InnerException: System.Data.EntityCommandCompilationException 
     Message=An error occurred while preparing the command definition. See the inner exception for details. 
     Source=System.Data.Entity 
     StackTrace: 
      at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
      at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
      at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
      at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
     InnerException: System.NotSupportedException 
      Message=Server-generated keys and server-generated values are not supported by SQL Server Compact. 
      Source=System.Data.SqlServerCe.Entity 
      StackTrace: 
       at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateReturningSql(StringBuilder commandText, DbModificationCommandTree tree, ExpressionTranslator translator, DbExpression returning) 
       at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, List`1& parameters, Boolean isLocalProvider) 
       at System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, List`1& parameters, CommandType& commandType, Boolean isLocalProvider) 
       at System.Data.SqlServerCe.SqlCeProviderServices.CreateCommand(DbProviderManifest providerManifest, DbCommandTree commandTree) 
       at System.Data.SqlServerCe.SqlCeProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) 
       at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) 
       at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree) 
       at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
      InnerException: 
+1

Sería más fácil si pudiéramos tener el mensaje de la excepción interna real ...? ¿Qué es GameID? una clave externa? ¿Hay un juego con ID 1? – Kek

+0

GameID es la identificación que uso para sacar la puntuación más alta para el juego apropiado. GameID = 1 se utiliza para indicar al juego dónde se debe extraer la puntuación más alta. – Etarnalazure

+0

Pero voy a obtener la excepción interna – Etarnalazure

Respuesta

4

Me parece que la raíz de los problemas reside en el servidor SQL que utilice:

claves generadas por el servidor y los valores generados por el servidor no son compatibles por SQL Server Compact.

¿Está tratando de utilizar un auto incremento de ID en la versión compacta de SQL Server? No recuerdo bien, pero tal vez eso no sea posible con esa versión de SQL. Te sugiero que verifiques eso primero.

+0

La cosa es, funcionó antes en un formulario. A menos que haya una diferencia entre los dos? – Etarnalazure

+0

No te entiendo exactamente. ¿Quieres decir que el mismo código se ejecutó una vez antes? Si es así, entonces tienes que verificar qué has cambiado desde entonces. Del mensaje de excepción parece que el problema está en la base de datos. ¿Cambiaste la base de datos detrás de esto? –

+0

Acabo de intentar eliminar Auto Increment en el ID desactivado, todavía me dio el mismo error. – Etarnalazure

1

Encontré la solución, parece que es la base de datos que puede fallar si está en uso en muchos lugares (esto es solo que estoy adivinando). De cualquier manera, crear una nueva tabla y luego agregar cosas allí parecía arreglarlo (No usó Identity).

5

Bueno, desde mi experiencia, que generalmente se desencadena por un error de db, en mi caso era un disparador asociado con la tabla que estaba fallando y arrojando la excepción raíz. Sin embargo, en su caso parece que está tratando de definir el ID de forma manual cuando usa un campo auto numerado (identidad).

+0

Gracias por hacerme pensar en desencadenantes. Yo estaba en el final de la cuerda. – feathj

0

En mi caso, después de encender la base de datos de la tabla, la clave principal de una columna auto_ink desapareció el problema.

0

claves generadas por el servidor no están funcionando bien para ir y comprobar la base de datos puede ser ur clave primery base de datos es clave generada automáticamente a fin de ir y tratar de insertar datos manualmente

0

Compruebe también las relaciones entre tablas.

Cuestiones relacionadas