Die folgende Antwort bezieht sich auf Datenbank-First oder Modell-First Workflow (die nur zwei Workflows, die mit Entity Framework verfügbar waren (Version < = 4,0), wenn die Frage gestellt wurde). Wenn Sie den Code-First-Workflow verwenden (der seit der EF-Version> = 4.1 verfügbar ist), fahren Sie mit der Frage answer bei dieser Frage fort, um eine korrekte Lösung zu erhalten.
Die edmx Datei hat in der <ConceptualModel>
und <EntityContainer>
Definition ein Attribut für verzögertes Laden, wo man faul Laden im Allgemeinen auf false gesetzt werden:
<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">
Dies schafft die folgende Einstellung im Object Konstruktor:
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
this.ContextOptions.LazyLoadingEnabled = false;
OnContextCreated();
}
Mein Beispiel ist auf diese Weise nicht gemeint, dass die ObjectContext
erzeugt (oder DbContext
in neueren EF-Versionen) sollte manuell bearbeitet werden (was bei jedem Modellupdate aus der Datenbank überschrieben würde, wie ctorx darauf hinwies), aber das EntityContainer
Element im edmx:ConceptualModels
-Teil der EDMX-Datei sollte durch Hinzufügen des annotation:LazyLoadingEnabled="false"
Attributs bearbeitet werden - entweder manuell in einem XML-Editor oder auf der Eigenschaftenseite der Designeroberfläche, auf der diese Option ebenfalls verfügbar ist. Diese Änderung der EDMX-Datei generiert automatisch die Kontextklasse mit der deaktivierten Lazy Loading-Option im Konstruktor, wie oben gezeigt. Die EDMX-Dateiänderung selbst wird nicht überschrieben, wenn das Modell von der Datenbank aktualisiert wird.
Perfekt, danke. –
Dazu müssen Sie den generierten Code ändern, der überschrieben wird, wenn Sie Ihr Modell ändern. Erwägen Sie, eine ObjectContextFactory an Ort und Stelle zu setzen und die Änderung in der Factory vorzunehmen. Auf diese Weise setzen Sie die Option immer noch nur einmal und Sie ändern den automatisch generierten Code nicht. – ctorx
@ctorx - AFAICT eine einfachere Option als die Fabrik würde nur die partielle OnContextCreated implementieren, um Lazy Loading aus zu schalten? Oder fehlt mir etwas? –