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

问题描述 投票:0回答:2

我正在尝试将实体框架与 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();

当我尝试执行此操作时,会出现

UpdateException
Personne
表只有 3 列:
id (int, primary key), nom (varchar) and 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 树、List

1& parameters, Boolean
  isLocalProvider)
         … System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree
  tree, List
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
  identifierValues)
         … System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator
  translator, EntityConnection
  connection, Dictionary
2 标识符值,列表`1 生成值) ... System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager、IEntityAdapter 适配器)

谢谢你:)

c# .net sql-server entity-framework sql-server-ce
2个回答
1
投票

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

id
。这是例子。

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

你必须保持

lastId
。我上面写的代码只能在单线程中运行。


0
投票

哈哈佩罗埃维塔…

Pedir ayuda,回应者对其他回应的回应。 Hacer declaraciones basadas en comments;参考或个人经验。 欲获取更多信息,请咨询我们

© www.soinside.com 2019 - 2024. All rights reserved.