【问题标题】:UpdateException when using SQL Server Compact with Entity Framework将 SQL Server Compact 与实体框架一起使用时出现 UpdateException
【发布时间】:2011-01-19 14:10:35
【问题描述】:

我正在尝试将实体框架与 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, primary key), nom (varchar) and prenom (varchar).

这是我运行程序时的显示:

System.Data.EntityCommandCompilationException: Une erreur s'est produite lors de la 定义的准备 指挥。倾倒细节, Consultez l'exception interne。 ---> System.NotSupportedException: Les clès et les valeurs générées par le serverur ne sont pas prises en charge par SQL 紧凑型服务器。

System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree 树,List1& parameters, Boolean isLocalProvider) … System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, List1& 参数,CommandType& commandType, Boolean 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 命令树) --- Fin de la trace de la Pile d'exception interne --- … 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, Dictionary2 标识符值,列表`1 生成的值) … System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter 适配器)

谢谢你:)

【问题讨论】:

  • 这是一场猜测错误是什么的竞赛,还是您想与我们分享一下,也许会得到答案?
  • 这里的主要语言是英文,请将错误文本翻译成英文。

标签: c# .net sql-server entity-framework sql-server-ce


【解决方案1】:

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

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

你必须维护lastId。我上面写的代码只能在单线程中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多