Ich habe mich ein wenig mit der Lebensdauer des DataContext befasst und versucht herauszufinden, was der bestmögliche Weg ist, die Dinge zu tun.
Da ich meine DAL in einer Webanwendung wiederverwenden möchte, entschied ich mich für die Datenkontext pro Business-Objekt-Anfrage Ansatz.
Meine Idee war es, meine L2S-Entitäten aus der dbml-Datei zu erweitern, um Informationen aus der Datenbank abzurufen, indem ich einen separaten Kontext pro Anfrage erstellt habe, z.B.
public partial class AnEntity
{
public IEnumerable<RelatedEntity> GetRelatedEntities()
{
using (var dc = new MyDataContext())
{
return dc.RelatedEntities.Where(r => r.EntityID == this.ID);
}
}
}
In Bezug auf die Rückgabe der Entitäten ... muss ich POCOs an dieser Stelle zurückgeben oder ist es in Ordnung, einfach das Geschäftsobjekt aus der Abfrage zurückgegeben? Mir ist klar, dass der Versuch, auf Eigenschaften der zurückgegebenen Entität zuzugreifen (nachdem der DataContext entsorgt wurde), fehlschlagen würde. Dies ist jedoch der Grund, warum ich beschlossen habe, diese Art von Methoden zu implementieren, z. B.
Anstelle von:
AnEntity entity = null;
using (var repo = new EntityRepo())
{
entity = repo.GetEntity(12345);
}
var related = entity.RelatedEntities; // this would cause an exception
Theoretisch sollte ich dazu in der Lage sein:
AnEntity entity = null;
using (var repo = new EntityRepo())
{
entity = repo.GetEntity(12345);
}
var related = entity.GetRelatedEntities();
In Anbetracht der Umstände meiner speziellen Anwendung (muss in einem Windows-Dienst & Web-Anwendung arbeiten) würde ich gerne wissen, ob dies ein plausibler Ansatz zu sein scheint, ob es offensichtliche Mängel gibt und ob es bessere Ansätze für das, was ich zu tun versuche, gibt.
Gracias.