Frage

Ich frage mich, ob es Alternativen zur Verwendung des Taste -Wortes erweitern, wenn ein LINQ an ADO.NET Data Services -Abfrage ausgeführt wird. Die Erweiterungsmethode bringt mir die Daten, an denen ich interessiert bin, aber es erfordert, dass ich alle Sub-Objekte kenne, mit denen ich im Voraus arbeiten werde. Meine absolute Präferenz wäre, dass diese Sub-Objekte für mich faul geladen wären, wenn ich auf sie zugreift, aber dies scheint keine Option zu sein (ich könnte dieses faule Laden in diese Sub-Object-Eigenschaft hinzufügen, aber es Wird ausgelöscht, wenn ich die Data -Service -Referenz aktualisiere).

Hat jemand Vorschläge/Best Practices/Alternativen für diese Situation? Vielen Dank.

====== Beispielcode mit Mitglied mit einem mailingAddress =====

Werke:

var me = (from m in ctx.Member.Expand("MailingAddress")
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

Ich würde es vorziehen (würde es wirklich mögen, wenn dies dann ging und die Mailingaddress lud)

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

Oder zumindest (Hinweis: Etwas Ähnliches wie bei MailingAddressReference, funktioniert auf der Serverseite, wenn ich dies als linq für Entitäten in einem Servicevorgang tue).

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
if (!(me.MailingAddress.IsLoaded())) me.MailingAddress.Load()
MessageBox.Show(me.MailingAddress.Street);
War es hilfreich?

Lösung

Das Laden von Sub-Objekten über ADO.NET-Datendienste scheinen zwei Auswahlmöglichkeiten zu haben:

Eifriger Belastung

Erfüllt von .expand ([memberVariableName]) auf dem Beispiel für LINQ zu Data Services

var me = (from m in ctx.Member.Expand("MailingAddress")          
         where m.MemberID == 10000          
         select m).First();
MessageBox.Show(me.MailingAddress.Street);

Faules Laden

Erfüllt durch Anruf .loadProperty im Kontext und über die Variable und die Eigenschaft, die faul geladen sein sollte.

var me = (from m in ctx.Member          
          where m.MemberID == 10000          
          select m).First();
ctx.LoadProperty(myMember, "MailingAddresses");
MessageBox.Show(me.MailingAddress.Street);

Andere Tipps

Mit linq zu Entitäten können Sie auch die verwenden Methode einschließen. Sie können dies auf mich anwenden, nachdem es deklariert wurde, aber bevor es ausgeführt wurde, z. B.:

me = me.Include("MailingAddress");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top