UpdateException при использовании SQL Server Compact с Entity Framework - PullRequest
0 голосов
/ 19 января 2011

Я пытаюсь использовать Entity Framework с 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 'Это лучший продукт для определения бизнеса.Pour plus de détails, обращайтесь за помощью в интернете.---> System.NotSupportedException: наследники и партнеры, работающие на платформе SQL Server Compact.

System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql (DbInsertCommand1& parameters, Boolean isLocalProvider) … System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, List 1 и параметры, 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.интернация исключений ---… System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand (DbModificationCommandTree commandTree)… System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand (переводчик UpdateTranslator, словарь 2 identifierValues) … System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary 2 identifierValues, список `1 генерируемых значений)… System.Data.Mapping.Update.Internal.UptdanTanager IE, Адаптер IEntityAdapter)

Спасибо:)

1 Ответ

1 голос
/ 19 января 2011

SqlServer Compact не поддерживает генерацию ключей на стороне сервера. Вы должны сгенерировать ключ на стороне приложения. Так что установите id явно. Вот пример.

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

Вы должны поддерживать lastId. Код, который я написал выше, будет работать только в одном потоке.

...