2012-12-09 5 views
6

Ich habe so etwas wie ein Customer-Objekt mit bis zu 50000, um in einem ICollection<Orders>. Nehmen Sie an, dass der Custome im lokalen Cache ist, die Befehle nicht. Wie kann ich den Cutomer und alle zugehörigen Bestellungen löschen, ohne alle Kundenbestellungen in den Cache zu laden und sie mit setDeleted() zu markieren? Was ist die beste Vorgehensweise hier. Ich nehme an, die public SaveResult SaveChanges(JObject saveBundle) Methode ist der beste Weg. Irgendwelche anderen Möglichkeiten hier auf der Kundenseite wie eine Flagge delete_all_navigation_too()?Löschen von Entitäten und ihre Navigationseigenschaften

Dank

Antwort

5

Simplest Ansatz, den ich mit oben kommen kann ist eine Kaskade löschen Einschränkung für die Datenbank zu erstellen, so dass, wenn ein Kunde alle seine Aufträge gelöscht wird auch gelöscht. Dann lösche einfach den Kunden auf dem Client und rufe 'SaveChanges' auf. Da Breeze noch keine "kaskadierten" Löschungen auf der Client-Seite unterstützt (wir ziehen dies in Betracht), müssen Sie darüber hinaus alle bereits geladenen Aufträge auf der Clientseite durchlaufen und sie "trennen".

+0

Vielen Dank für beide Vorschläge. Da ich zwei Antworten nicht als richtig akzeptieren kann, wählte ich diese zufällig. –

+0

Oh Sascha! Wie konntest du Jay über mich aussuchen? :-) – Ward

+0

Nun, ich warf eine Münze, bis Jay zufällig gewann ^^. Sorry Ward, ich musste Jay den Kredit geben. Dein Ruf war himmlisch, eine Abzeichenzahl, die so hoch war, dass ein General eifersüchtig sein würde. Das nächste Mal, wenn Sie gewinnen, verspreche ich :) –

6

Ich muss annehmen, dass Sie nicht haben, und wollen auf Ihre Datenbank nicht Kaskade löschen. Persönlich bin ich von Löschungen im Allgemeinen "erschrocken" und versuche, sie zu vermeiden. Ich bevorzuge ein weiches Löschen (einen Datensatz als inaktiv markieren). Aber nicht jeder stimmt oder Anzug

folgen halte ich würde eine Web-API-Methode Hinzufügen (sagen „DeleteCustomerAndOrders“) auf dem Controller, es zu tun. Sie können eine beliebige API-Methode von Ihrem Client aufrufen, nicht nur eine Breeze-Methode.

dies Bei der Empfehlung, ich gehe davon aus, dass diese Art der Sache eine relative Seltenheit in Ihrer Anwendung ist. Sie brauchen keinen allgemeinen Löscher, einen Löscher, der ein Array von übergeordneten Objekt-IDs verwendet, einen Löscher, der einige untergeordnete Objekte löscht und keine anderen, usw. usw.

Folgen Sie diesem Pfad und Sie wird das Problem vom Client auf den Server verschoben haben. Das ist gut: Sie mussten die Aufträge nicht auf den Client laden. Jetzt müssen Sie sie auf dem Server loswerden. Wenn Sie Entity Framework verwenden, stehen Sie vor der gleichen Herausforderung, die Aufträge zu löschen, ohne sie zu laden. Sehen Sie sich die Lösung von Alex James an: Bulk-deleting in LINQ to Entities.

Verwandte Themen