2012-04-14 4 views
0

Kürzlich habe ich LazyLoading in meiner Anwendung deaktiviert, weil ich hoffte, dass es mir die Anzahl der SQL-Abfragen, die ich sendete, bewusster machte. Das Problem ist, dass wenn ich irgendwo vergessen habe, eine Entity zu laden, bevor ich versuche, darauf zuzugreifen, es gibt nur null zurück (anstelle einer Exception). Das bedeutet, dass meine Logik zu Unrecht davon ausgeht, dass der Wert null ist, wodurch später alle Probleme im Fluss verursacht werden.Ist es möglich, beim Zugriff auf entladene Navigationseigenschaften in Entity Framework eine Ausnahme auszulösen?

Ich weiß, dass es das IsLoaded-Flag gibt, aber zuerst müssen Sie Code hinzufügen, und zweitens ist dies immer noch etwas, das Sie vergessen können zu überprüfen.

Ist es möglich, dass das Entity Framework beim Zugriff auf eine entladene Navigationseigenschaft automatisch eine Ausnahme auslöst? Es scheint der richtige Weg zu mir zu sein, warum würdest du jemals die Tatsache ignorieren wollen, dass deine Entität nicht geladen ist und einfach das Programm weitermachen lassen?

Oder denke ich in die falsche Richtung? : |

(Btw EntityCollections sind noch schlimmer, weil sie einfach eine leere Liste zurück wie nichts falsch ist)

Antwort

0

Nein es keine automatische Möglichkeit, das zu tun. Theoretisch können Sie benutzerdefinierte T4-Vorlage erstellen, um Ihre Entitäten zu generieren, und IsLoaded in jedem Eigenschaftengetter überprüfen. Wenn Sie den POCO-Ansatz verwenden wollen, wird Ihnen das nicht weiterhelfen, da eine solche Prüfung die POCO-Regeln bricht und Ihre Entitäten von EF abhängig macht. Wenn Sie EntityObject basierte Entitäten verwenden, können Sie einen solchen Ansatz versuchen.

+0

Ich benutze DB zuerst, aber es klingt wie eine Menge Arbeit. Würden Sie das empfehlen? Wie gehen Sie selbst mit diesem Problem um? –

+0

Es sollte nicht so eine große Sache sein. Sie beginnen mit der vorhandenen Vorlage und aktualisieren nur den Eigenschafts-Getter-Generierungscode für die Navigationseigenschaft. –

Verwandte Themen