У меня проблема с использованием служб данных WCF для объекта, который имеет составной первичный ключ. Я использую шаблон бизнес-приложения Silverlight 4 и создал модель данных объекта (EDM) для базы данных для соответствующих таблиц и создал службу данных WCF для этого EDM в веб-проекте. Проект Silverlight имеет ссылку на службу данных службы WCF. Пока все довольно стандартные вещи:)
Ради простоты и легкости отладки я сузил это до очень простого сценария:
Lookup
таблица содержит столбцы Id
и Data
.
Lookup2
таблица содержит столбцы Id
и Data
.
MyData
таблица содержит столбцы LookupId
, Lookup2Id
, SomeDate
и ExtraData
.
LookupId
- это внешний ключ таблицы Lookup
.
Lookup2Id
- это внешний ключ таблицы Lookup2
.
- Столбцы
LookupId
, Lookup2Id
и SomeDate
образуют первичный ключ для таблицы MyData
.
Затем я могу загрузить данные из справочных таблиц в отдельные CollectionViewService
с, используя отдельные DataServiceCollection
с. Я также загружаю основные данные в другой CollectionViewSource
через третий DataServiceCollection
. Для свойства ItemsSource
в элементах управления ComboBox
я привязываюсь к соответствующему CollectionViewSource
, а затем привязываю свойство SelectedItem
к соответствующему свойству навигации. Пока все работает нормально.
Затем я добавляю кнопку Сохранить изменения с обработчиком Click
, который вызывает BeginSaveChanges
. Если я изменяю значение поля ExtraData
, а затем нажимаю Сохранить изменения , изменения сохраняются без проблем. Однако, если я изменяю значение одного из свойств навигации, я получаю исключение при вызове BeginSaveChanges
:
Ошибка обработки потока запросов. Обнаружена ошибка при установке значения для свойства «Lookup». Пожалуйста, проверьте правильность значения.
Если еще больше упростить EDM, чтобы внешний ключ не являлся частью составного ключа, изменения можно успешно сохранить, однако составной ключ в реальном приложении является важной частью модели данных.
Есть предложения о том, что я делаю неправильно, и как изменить свойство навигации, которое является частью составного ключа?
Спасибо,
Дерек.