Ошибка обновления сущности служб данных WCF и тип первичного ключа таблицы - PullRequest
1 голос
/ 06 июня 2011

Некоторое время я не мог выяснить причину ошибки при попытке обновить поле в таблице с помощью WCF Data Services плюс Entity Framework:

MydbEntities context = new MydbEntities(new Uri("http://localhost:53051/Services/MydbService.svc"));
MyEntity entitytoedit = context.MyEntity.FirstOrDefault();
entitytoedit.Name = "TheNewName";
context.UpdateObject(entitytoedit);
context.BeginSaveChanges(OnChangesSaved, context);
...

Ошибка была следующей: RequestException Ошибка при обработке этого запроса.

Исправление заключалось в добавлении автоинкрементного поля decimal(18, 0) в качестве первичного ключа со спецификацией идентификации IsIdentity = yes вместо просто поля varchar(20) в качестве первичного ключа.

Пожалуйста, кто-нибудь может объяснить природу проблемы: должен ли я всегда использовать автоинкрементные первичные ключи с WCF Data Services? Если нет, то где я на самом деле ошибаюсь?

1 Ответ

1 голос
/ 27 сентября 2011

Я думаю, что это больше вопрос Entity Framework, чем WCF Data Services.

У вас может быть поле первичного ключа, которое вы установили руками, и вы должны установить StoreGeneratedPattern на None.

Или вы можете использовать поле AutoIncrement в качестве первичного ключа, и в этом случае вы должны установить для StoreGeneratedPattern значение Identity.

Смешивание этого с делами всегда ломает вещи. Кроме того, когда вы делаете Model First, поле первичного ключа по умолчанию имеет тип int и StoreGeneratedPattern, установленный на Identity, поэтому просто изменить тип на decimal, как в вашем случае, недостаточно.

...