2012-06-08 19 views
6

mi sono guardato intorno e non riesco a capire cosa c'è che non va.Si è verificato un errore durante l'aggiornamento delle voci. Vedi l'eccezione interna per i dettagli. - Linq to Entity

Attualmente sto cercando di aggiornare il mio database con un nuovo punteggio quando il giocatore muore. Ma continua a lanciare quell'eccezione contro di me, indipendentemente da cosa scelgo di provare e salvare.

Codice:

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(); 

Ho controllato, ancora e ancora, e ho appena cant sembrano per capire quale sia il problema.

Qualsiasi aiuto sarebbe appagato.

L'eccezione:

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

Sarebbe più facile se potessimo avere il messaggio dell'eccezione interna effettiva ...? Che cos'è GameID? una chiave straniera? c'è un gioco con ID 1? – Kek

+0

GameID è l'ID che uso per estrarre il punteggio appropriato per il gioco appropriato. GameID = 1 è usato per dire al gioco dove dovrebbe essere tirato fuori il punteggio. – Etarnalazure

+0

Ma otterrò l'eccezione interna – Etarnalazure

risposta

4

Mi sembra che la radice dei problemi risiede sul server SQL si utilizza:

chiavi generate dal server ed i valori generati dal server non sono supportati di SQL Server Compact.

Si sta tentando di utilizzare un ID di incremento automatico su SQL Server versione compatta? Non ricordo bene, ma forse non è possibile con quella versione SQL. Ti suggerisco di controllarlo prima.

+0

Il fatto è che prima funzionava su un modulo. A meno che non ci sia una differenza tra i due? – Etarnalazure

+0

Non ti capisco esattamente. Vuoi dire che lo stesso codice è stato eseguito una volta prima? Se lo è, allora devi controllare cosa hai cambiato da quel momento. Dal messaggio di eccezione sembra che il problema sia con il database. Hai cambiato il database dietro di esso? –

+0

Appena provato a rimuovere Auto Increment sull'ID disattivato, mi ha comunque dato lo stesso errore. – Etarnalazure

1

Trovato la soluzione, sembra che sia il database che può baciare se in uso troppi posti (Questo è solo me a indovinare). In entrambi i casi, la creazione di una nuova tabella e l'aggiunta di elementi sembravano risolvere il problema (Non usare Identity.)

5

Bene dalla mia esperienza, che di solito è causata da un errore db, nel mio caso era un trigger associato a la tabella che stava fallendo e gettando l'eccezione di root. Nel tuo caso, tuttavia, sembra che tu stia tentando erroneamente di definire manualmente l'id quando usi un campo numerato (identità) automatico.

+0

Grazie per avermi fatto pensare a trigger. Ero alla fine della mia corda. – feathj

0

Nel mio caso dopo aver acceso il database della tabella la chiave primaria di una colonna auto_ink il problema è andato.

0

chiavi generate dal server non sono un buon rendimento in modo da andare a controllare il database può essere ur chiave del database primery è la chiave generata automaticamente in modo da andare e cercare di inserire i dati manualmente

0

controllare anche le relazioni tra le tabelle.