Was sind die Alternativen zur Verwendung von Erweiterung in einem LINQ zu ADO.NET Data Service -Abfrage?
-
05-07-2019 - |
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);
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");