Этот вопрос возникает из этого другого article. В настоящее время я использую BreezeJS с Entity Framework, но я не верю, что использую его так, как планировалось. В настоящее время я вызываю изменения сохранения в массиве объектов, которые я отправляю на сервер, а затем десериализую их в свою исходную структуру. Я надеюсь, что есть лучший способ сделать это, которого я просто не смог найти. Есть два способа, по которым я могу это сделать, но не могу заставить их работать.BreezeJS saveChanges отправляет массив вместо объекта
Первым было бы отправить массив как отдельный объект, который при десериализации уже был бы в структуре объекта. Когда клиентская сторона является форматом, в котором объект хранится, поэтому он не будет выполнять никаких дополнительных действий.
Второй вариант заключается в том, чтобы каким-то образом использовать массив, который отправляется на сервер, и строить структуру объекта с использованием метаданных платформы Entity Framework в EFContextProvider.
Если возможно, я предпочел бы решение ближе к варианту 1.
Javascript
function saveObjects() {
// Assume the child class has a foreign key to the parent
var parent = dataService.createEntity('PARENT', parentObject);
var child = dataService.createEntity('CHILD', childObject);
// Save changes
// This is what I'm currently doing because each entity is seperate
dataService.saveChanges([parent, child]);
// This is what I would like to do
// dataService.saveChanges(parent);
}
Объект, который в настоящее время отправлены выглядит следующим образом. Я хочу, чтобы РЕБЕНОК действительно был ребенком в объекте PARENT, когда он отправляется через.
// Current saveBundle
{"entities": [
{"ID: 1,
"entityAspect": {"entityTypeName": "PARENT", ...}},
{"PARENT_ID: 1,
"entityAspect": {"entityTypeName": "CHILD", ...}}
]}
// Ideal saveBundle
{"entities": [
{"ID: 1,
{"PARENT_ID: 1,
"entityAspect": {"entityTypeName": "CHILD", ...}},
"entityAspect": {"entityTypeName": "PARENT", ...}},
]}
C#
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
// Currently I have to deserialize each object and rebuild the object
// because the save bundle is a list of single entities instead of
// the existing object hierarchy
PARENT parent = DeserializeEntity(saveBundle, 'PARENT');
parent.child = DeserializeEntity(saveBundle, 'CHILD');
// Custom Validation and Saving is done here
}
Я могу использовать BreezeJS неправильно, но проверка и сохранение базы данных происходит в отдельных модулях далее вниз по линии. Я просто пытаюсь вырезать некоторую ручную работу посередине (необходимо перестроить структуру объекта).
Даже когда объекты связаны с клиентом, Breeze разбивает их на массив, чтобы избежать проблем с циклической ссылкой при сериализации в JSON. На сервере EFContextProvider добавляет их в контекст EF; EF автоматически восстанавливает граф объекта во время этого процесса. –
В этом проблема, я не могу найти примеров того, как это делается. На сервере у меня есть массив отправленных объектов, но я не могу понять, как использовать мой EFContextProvider для создания моего объекта из массива. –
Но зачем вам это нужно, когда оно делает это за вас автоматически? –