Frage

mit Linq-to-SQL würde Ich mag einige Daten vorab abzurufen.

1) die gemeinsame Lösung ist mit Dataload beschäftigen , aber in meiner Architektur wird es nicht funktionieren, weil:

  • haben die Optionen vor der ersten Abfrage festgelegt werden
  • Ich verwende IOC, so dass ich instanziieren nicht direkt auf den Datacontext (I-Code bei Instanciation nicht ausführen kann)
  • meine Datacontext ist hartnäckig für die Dauer einer Web-Anfrage

2) Ich habe eine andere Möglichkeit gesehen, basierend auf loading Daten und ihr Childs in einem Verfahren, dann nur die Daten zurückkehren (so werden das Kind bereits geladen) < a href = "http://www.west-wind.com/weblog/posts/38838.aspx" rel = "nofollow noreferrer"> hier ein Beispiel

Dennoch in meiner Architektur, es kann nicht nicht:

  • sind meine Anfragen aus meinem Repository kaskadiert und kann von vielen Dienstleistungen verbraucht werden, die Klauseln hinzufügen, werden
  • Ich arbeite mit Schnittstellen, die konkreten Instanzen der Linq-to-SQL-Objekte haben die Repositories nicht verlassen (ja, können Sie mit Schnittstellen arbeiten und füge Klauseln)
  • Meine Repositories sind generic

Ja, diese Architektur ist ruhig kompliziert, aber es ist sehr cool, wie ich mit dem Code wie lego spielen kann;)

Meine Frage ist: Was sind die andere Möglichkeiten ein Daten Prefetch

War es hilfreich?

Lösung

In meiner app verwende ich vielleicht eine Variation an Ihre potentiellen Lösung # 2. Es ist etwas schwierig zu erklären, aber einfach: i Kette und verzögertes Laden in meinem Modell mit benutzerdefinierten verschieben faul Klassen weg, um abstrakten vom LinqToSql spezifischen unterschieden Ausführung, die ich mit IQueryable Anspruch nehmen. Vorteile:

Andere Tipps

Ich bin mir nicht bewusst, andere Möglichkeiten, es scheint, wie Sie LinqToSql an seine Grenzen (ich kann falsch sein, jedoch).

gedrückt haben

Ich denke, die besten Optionen an diesem Punkt sind:

  1. Fügen Sie einige „non-generic“ Methoden, um Ihre Anwendung zu behandeln nur die spezifische Szenarien, in denen Sie / brauchen eifrig Laden wollen und dies nicht tun Verwenden Sie Ihre „normal“, „generische“ Infrastruktur für diese Methoden.
  2. Verwenden Sie einen ORM, die anspruchsvollere Unterstützung für eifrigen und verzögertes Laden hat.

ich eine Lösung gefunden. Meine Antwort ist ' Dependency Injection '.

Es ist im Allgemeinen mit IOC ausgeliefert und können Sie einen Container Injektion von Klassen bei Instanciation verwalten IOC haben kann.

Alles was ich brauche ist ein CustomDCParameter Klasse zu injizieren, wenn ich eine DC instanziiert. Das Klasse enthält die Regeln, und der Konstruktor werden alle von ihnen gelten.

scroll top