LINQ to SQL: Filter verschachtelte Objekte mit weichen Löschungen
-
04-10-2019 - |
Frage
Ich bin mit weichen Löschen in meiner Datenbank (IsDeleted
Feld). Ich LoadWith
und AssociateWith
Methoden aktiv mit zum Abrufen und Aufzeichnungen Filter verschachtelt sind.
Die Sache ist AssociateWith
funktioniert nur mit Eigenschaften, die eine Eins-zu-viele-Beziehung darstellt.
DataLoadOptions loadOptions = new DataLoadOptions();
loadOption.LoadWith<User>(u = > u.Roles);
loadOption.AssociateWith<User>(u = > u.Roles.Where(r = > !r.IsDeleted));
In dem obigen Beispiel ich nur sagen:. Ich mag Benutzer abgerufen werden mit verwandten (undeleted) Rollen
Aber wenn ich eine Eins-zu-Eins-Beziehung, z.B. Document
-> File
(die nur eine Datei mit dem Dokument verbunden ist) Ich bin nicht in der Lage zu Filter weiches Objekt gelöscht:
DataLoadOptions loadOptions = new DataLoadOptions();
loadOption.LoadWith<Document>(d = > d.File);
// the next certainly won't work
loadOption.AssociateWith<File>(f = > !f.IsDeleted);
So ist es eine Idee, wie man Filter Datensätze innerhalb der Eins-zu-Eins-Beziehung?
Danke!
Lösung
Bisher fand ich nur eine geeignete Lösung für diese (abgesehen von nicht weichen Löschungen überhaupt zu benutzen.): Die Soft-Löschung Beziehung auf Einheit Update löschen
z. wenn ich eine Datei aus dem Dokument entfernen entschieden, führe ich so etwas wie:
// this may be a part of update method
var file = document.File;
if (file.IsDeleted)
{
// attach soft deleted file
context.Files.Attach(file, true);
// remove a file reference
document.File = null;
}
// attach document entity and submit changes
context.Documents.Attach(document, true);
context.SubmitChanges();
So kann dies ein Ersatz für eine Eins-zu-Eins-Beziehung Filterung auf komplexen Daten abruft.
Andere Tipps
vielleicht versuchen:
loadOptions.AssociateWith<File>(f => f.IsDeleted ? null : f);
dies werden Sie null anstelle von Dateien, in denen IsDeleted wahr ist.