Это очень поздний ответ, но на тот случай, если кто-то еще столкнется с этими проблемами снова; важно, чтобы __type
был первым ключом в сущности.
Я столкнулся с такими исключениями, как:
This DomainService does not support operation 'Update' for entity 'Object'
которые указывают, что доменная служба не смогла определить тип объекта, и поэтому не смогла найти соответствующий обработчик.
Исследование подняло этот пост на тему http://www.blog.yumasoft.com/node/108, в котором содержится решение.
Я хотел бы отметить, что это поведение противоречит спецификации JSON (см .: https://stackoverflow.com/a/5525820/1395343).
Один из возможных обходных путей - использовать replace
, чтобы гарантировать, что __type
окажется в правильном месте. Я не уверен, что это хорошая идея, но она работает.
var entityChange = {};
entityChange.Id = 0;
entityChange.Operation = 3;
entityChange.Entity = {'key': 'Something that changed'};
var payload = JSON.stringify({ changeSet: [entityChange]});
// This is not an ideal way of doing this.
payload = payload.replace('"Entity":{', '"Entity":{"__type":"TypeName:#Namespace.Stuff",');
return $.ajax({
url: "...Web.svc/JSON/SubmitChanges",
method: "POST",
data: payload,
contentType: "application/json",
dataType: "json",
processData: false,
});