Ich versuche, ein Löschen einer Hierarchie von Objekten zu tun:setDeleted Schleife in modifizierten Einheiten, was zu savechanges nennen
Customer-> Orders-> OrderItems-> OrderItemOptions
ich eine einfache verschachtelte Schleife einrichten versuchen, die Operationen sogar in der "korrekten" Reihenfolge auszuführen, wie sie in der Datenbank ausgeführt werden müssten - Löschen von Kinddatensätzen zuerst, bevor Eltern gelöscht werden.
Hier ist die Schleife:
deleteCustomer(customer: Customer): Promise<void> {
return this.getCustomerOrderHistory(customer.id).then(orders => {
orders.forEach(o => {
o.items.forEach(oi => {
oi.options.forEach(opt => opt.entityAspect.setDeleted());
oi.entityAspect.setDeleted();
});
o.entityAspect.setDeleted();
});
customer.entityAspect.setDeleted();
});
}
Das Problem ist, dass, wenn das übergeordnete Objekt auf jeder Ebene setDeleted ist(), eine Reihe von doppelten Entitätsdatensätze markiert als „modifiziert“ auf die Änderungen durch die gepufferte hinzugefügt werden EntityManager. Wenn ich dann saveChanges aufruft, löst das Backend von ASP.NET/EF eine Ausnahme aus, weil zu dem Zeitpunkt, zu dem die UPDATE-Anweisungen dieser modifizierten Datensätze ausgeführt werden, die DELETEs bereits geschehen sind und die UPDATEs mit einer nicht gefundenen Ausnahme fehlschlagen.
Also was fehlt mir hier?
Danke Steve, das war genau das Problem. Ich wusste, dass Breeze Kinder/Eltern-Beziehungen hinzufügen oder entfernen kann, indem sie entweder die FK-Eigenschaft (dh order.customerId) oder die nav-Eigenschaft (dh order.customer) oder beide setzt, also dachte, dass etwas so läuft, aber nicht konnte Finde warum. –