Сохраните внешний ключ, но не весь объект в службах данных WCF - PullRequest
0 голосов
/ 02 декабря 2010

Я использую Silverlight 4, Entity Framework 4 и WCF Data Services. Скажем, у меня есть объект списка воспроизведения. Этот объект списка воспроизведения имеет свойства и внешний ключ, представленный свойством навигации от 0 до 1 для экранного объекта. В базе данных есть столбец Display_Id.

Я пытаюсь сохранить плейлист и установить display_id напрямую, без загрузки всего экранного объекта из базы данных (я получаю идентификатор дисплея из строки запроса). Я пробовал:

playlist.Display = new Display() { Id = 3136 };
// this SetLink throws an exception that the Display is not yet tracked    
context.SetLink(playlist.Display, "Display", playlist);
// or i've tried, but get an error: Entities in 'EDM.Displays' participate in the //'DisplayX' relationship. 0 related 'X' were found. 1 'X' is expected
context.AddToDisplays(playlist.Display);
context.SetLink(playlist, "Display", playlist.Display);

Нужно ли менять мой EDM или есть способ сделать это на стороне клиента?

1 Ответ

1 голос
/ 03 декабря 2010

Прежде всего Вам необходимо прикрепить объект к ObjectSet

Display d = new Display{ id = 3136 };
context.Displays.Attach(d);

он будет выполняться локально без вызова базы данных, и тогда вы сможете работать так, как вам нужно

есть и другой способ: список воспроизведения объекта содержит объект DysplayReference со свойством EntityKey, если он равен нулю, то создайте его, иначе просто замените ключ в EntityKeyValues ​​

...