Можно ли обновить объект службы данных WCF (oData), не выполнив сначала запрос?

Я ломал голову над этой проблемой и, возможно, я не смотрю на нее неправильно.

У меня есть серверная архитектура, которая выглядит как этот SQL Server -> EF -> WCF Data Service (oData)

Есть ли способ обновить сущность на стороне сервера без предварительного запроса к серверу.

Из всей прочитанной документации видно, что для добавления объекта в контекст для отслеживания требуется запрос. После отслеживания можно внести изменения в сущность, а затем вызвать BeginSaveChanges для выполнения обновления.

Я получаю доступ к своей службе oData из приложения Windows Phone, где я храню сущность сервера (с его идентификатором) в изолированном хранилище как объект POCO. Я не храню DTO, созданный из прокси-клиента WCF.

Я не хочу сначала запрашивать объект, чтобы сэкономить на пропускной способности.

1 ответ

Решение

Да, вам нужно создать фиктивную сущность, а затем присоединить и сохранить ее.

например

using(var ctx = new MyContext())
{
   var dummyEntity = new MyEntity{ Id = 1 };
   ctx.MyEntities.Attach(dummyEntity); // EF now knows you have an entity with ID 1 in your db but none of its properties have changed yet
   dummyEntity.SomeProperty = 1; //the change to SomeProperty is now tracked
   ctx.SaveChanges();// a single update is called to set entity with Id 1's 'SomeProperty' to 1  
}

Однако с этим есть некоторые проблемы, но присоединение завершится неудачно, если к вашему контексту присоединены другие объекты с таким же идентификатором. Из-за этого лучше всего сохранять область вашего контекста очень маленькой при выполнении такого рода действий.

Другие вопросы по тегам