Ich brauche so etwas wie zu tun ...Warum entfernt EF untergeordnete Elemente beim Trennen?
- einen db Kontext erhalten (UtilitiesContext)
- Abfrage es für einige Daten (Wachte Verzeichnisse)
- Auch Kinder aus der db ziehen, wenn ich die WD ziehen (AdditionalData)
- Entsorgen Kontext
- Weiter Einheiten verwenden
...
// step 1
using (var db = new UtilitiesContext(false))
{
var jsonSettings = new JsonSerializerSettings { MaxDepth = 2, ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
// step 2
var dirs = db.GetAll<WatchedDirectory>();
// step 3 (lazy load and serialize the WD and its additional data)
log.Debug(JsonConvert.SerializeObject(dirs, jsonSettings));
foreach (var d in dirs)
{
try
{
log.Debug(" Initialising monitoring for path " + d.UNCPath);
// detach the object and its data items from the db
db.Detach(d);
d.AdditionalData.ForEach(i => db.Detach(i));
// here the AdditionalData property serialises an empty array
log.Debug(JsonConvert.SerializeObject(d, jsonSettings));
// step 4 happens down here
Mein Problem ist, dass ich alle Daten, die ich in der ersten Log-Ausgabe wollen erhalten (Linie markiert Schritt 3) Und dann später, wenn ich wiederhole, dass das Kind Sammlung gegangen ist und alles, was ich tat, war die Einheiten ablösen aus dem Kontext.
Meine detach Methode sieht wie folgt aus ...
public void Detach(object entity)
{
Entry(entity).State = EntityState.Detached;
}
Wenn Sie den Kontext disponieren, sollten Sie sie zuerst auf DTOs abbilden. Ich glaube, dass Sie viel mehr Problem haben werden als nur das, wenn Sie Ihrem gegenwärtigen Weg folgen. Wenn Sie mit Entitätsobjekten außerhalb eines Kontextbereichs arbeiten, werden Sie nach Problemen gefragt. –
Yeh ich hatte es in Betracht gezogen ... das sind sehr einfache Entitäten obwohl ich dachte, das könnte möglich sein, die Code-Duplizierung zu speichern – War
Ich habe versucht, ähnliche Dinge in der Vergangenheit zu tun, und es kommt IMMER zurück, um dich in den Arsch zu beißen , einfacher, die Mappings jetzt zu machen, als es zu einem späteren Zeitpunkt zu arbeiten, wo Sie eine viel größere Menge an Code neu schreiben müssen, wenn es schließlich auf Sie sprengt. –