将 SQL Server Compact 与实体框架结合使用时出现 UpdateException

发布于 2024-10-13 10:54:33 字数 2169 浏览 4 评论 0原文

我正在尝试将实体框架与 SQL Server Compact 一起使用。我可以执行读取,例如:

var context = new TestEntities();

foreach (var p in context.Personnes)
{
    Console.WriteLine(p.prenom + " " + p.nom);
}

但无法执行插入:

var context = new TestEntities();

context.Personnes.AddObject(new Personne() {nom = "Test", prenom = "Test" });

context.SaveChanges();

当我尝试执行此操作时,会引发 UpdateExceptionPersonne 表只有 3 列:id(int,主键)、nom (varchar) 和 prenom (varchar)。

以下是我运行程序 :

System.Data.EntityCommandCompilationException: Une erreur s'est produite lors de la 定义的准备工作 命令。倾注更多细节, 请咨询内部例外情况。 ---> System.NotSupportedException:Les clès 服务器的一般价值 与 SQL 无关 服务器紧凑型。

System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree 树,列表1&参数,布尔值 是本地提供者) ... System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree 树,列表1&参数、CommandType& 命令类型,布尔值 isLocalProvider) ... System.Data.SqlServerCe.SqlCeProviderServices.CreateCommand(DbProviderManifest 提供者清单、DbCommandTree 命令树) ... System.Data.SqlServerCe.SqlCeProviderServices.CreateDbCommandDefinition(DbProviderManifest 提供者清单、DbCommandTree 命令树) ... System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree 命令树) ... System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree 命令树) ... System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree 命令树) --- 内部异常堆的踪迹 --- ... System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree 命令树) ... System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator 翻译、词典2 标识符值) … System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator 翻译器,EntityConnection 连接,字典2 标识符值,列表`1 生成值) ... System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager、IEntityAdapter 适配器)

谢谢:)

I am trying to use Entity Framework with SQL Server Compact. I can perform reading such as :

var context = new TestEntities();

foreach (var p in context.Personnes)
{
    Console.WriteLine(p.prenom + " " + p.nom);
}

but I can't perform insert :

var context = new TestEntities();

context.Personnes.AddObject(new Personne() {nom = "Test", prenom = "Test" });

context.SaveChanges();

An UpdateException is raised when I try to do this. The Personne table has just 3 columns: id (int, primary key), nom (varchar) and prenom (varchar).

Here is the display I have when I run the program :

System.Data.EntityCommandCompilationException:
Une erreur s'est produite lors de la
préparation de la définition de la
commande. Pour plus de détails,
consultez l'exception interne. --->
System.NotSupportedException: Les clès
et les valeurs générées par le serveur
ne sont pas prises en charge par SQL
Server Compact.

System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree
tree, List1& parameters, Boolean
isLocalProvider)
… System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree
tree, List
1& parameters, CommandType&
commandType, Boolean isLocalProvider)
… System.Data.SqlServerCe.SqlCeProviderServices.CreateCommand(DbProviderManifest
providerManifest, DbCommandTree
commandTree)
… System.Data.SqlServerCe.SqlCeProviderServices.CreateDbCommandDefinition(DbProviderManifest
providerManifest, DbCommandTree
commandTree)
… System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree
commandTree)
… System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree
commandTree)
… System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree
commandTree)
--- Fin de la trace de la pile d'exception interne ---
… System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree
commandTree)
… System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator
translator, Dictionary2
identifierValues)
… System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator
translator, EntityConnection
connection, Dictionary
2
identifierValues, List`1
generatedValues)
… System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager
stateManager, IEntityAdapter adapter)

Thank you :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

狼性发作 2024-10-20 10:54:33

SqlServer Compact 不支持服务器端密钥生成。您必须在应用程序端生成密钥。因此明确设置id。这是一个例子。

context.Personnes.AddObject(new Personne() {id = lastId++, nom = "Test", prenom = "Test" });

您必须维护lastId。我上面写的代码只能在单线程中运行。

SqlServer Compact doesn't support server-side key generation. You must generate key on application side. So set id explicitly. Here is example.

context.Personnes.AddObject(new Personne() {id = lastId++, nom = "Test", prenom = "Test" });

You have to maintain lastId. Code that I wrote above will work only in single thread.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文