更新条目时出错.有关详细信息,请参阅内部异常.- 林克到实体
本文关键字:异常 内部 请参阅 林克 实体 详细信息 出错 更新 | 更新日期: 2023-09-27 18:36:30
一直在环顾四周,我似乎无法弄清楚出了什么问题。
目前,我正在尝试在玩家死亡时用新的高分更新我的数据库。但它一直在向我抛出这个例外,无论我选择尝试和保存什么。
法典:
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();
我检查了一遍又一遍,我似乎无法弄清楚问题是什么。
任何帮助都将得到赞赏。
例外情况:
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:
根据我的经验,这通常是由数据库错误触发的,就我而言,它是与失败并引发根异常的表相关的触发器。但是,在您的情况下,在使用自动编号(身份)字段时,您似乎错误地尝试手动定义 id。
在我看来
,问题的根源在于您使用的SQL服务器:
不支持服务器生成的密钥和服务器生成的值 SQL Server Compact。
您是否正在尝试在 SQL 服务器紧凑版本上使用自动递增 ID?我记不太清楚了,但也许那个SQL版本是不可能的。我建议你先检查一下。
找到了解决方案,似乎数据库在使用太多地方可能会出错(这只是我的猜测)。无论哪种方式,创建一个新表然后向其中添加内容似乎都可以修复它(未使用标识。
就我而言,在打开表数据库后,主键指向auto_ink列,问题消失了。
服务器生成的密钥性能不佳,因此请去检查数据库可能是您的数据库主密钥是自动生成的密钥,因此请尝试手动插入数据