Можно ли обновить объект службы данных 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
}
Однако с этим есть некоторые проблемы, но присоединение завершится неудачно, если к вашему контексту присоединены другие объекты с таким же идентификатором. Из-за этого лучше всего сохранять область вашего контекста очень маленькой при выполнении такого рода действий.