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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top