Gewusst wie: Vorgenerieren von Sichten zur Verbesserung der Abfrageleistung (Entity Framework)
Bevor eine Abfrage eines Entitätsdatenmodell (EDM) ausgeführt werden kann, erstellt der Entity Framework einen Satz von Sichten, die zum Zugriff auf die Datenbank verwendet werden. Entity Framework erstellt bei der erstmaligen Ausführung einer Abfrage Sichten und erhält diese während der Lebensdauer der ObjectContext-Instanz. Da das Generieren von Sichten einen signifikanten Teil der Gesamtkosten der Ausführung einer einzelnen Abfrage ausmacht, können diese Sichten mit Entity Framework vorgeneriert und dem kompilierten Projekt hinzugefügt werden. Zusätzlich zum Erstellen und Überprüfen der EDM-Mapping- und Modelldateien, wird das Tool EDM-Generator (EdmGen.exe) auch zum Vorgenerieren dieser Sichten verwendet. In diesem Thema wird dargestellt, wie mithilfe von EdmGen.exe Sichten für das Modell "School" vorgeneriert werden und die Sichtdatei dem Projekt hinzugefügt wird. Das Modell "School" wird im Entity Framework-Schnellstart erstellt. Im letzten Schritt wird gezeigt, wie die Modell- und Mappingdateien als eingebettete Ressourcen einer ASP.NET-Webanwendung erneut hinzugefügt werden.
Hinweis |
---|
Die Vorgehensweisen in diesem Thema verwenden Präbuild- und Postbuildereignisse in Visual Studio, die für ASP.NET-Websites nicht unterstützt werden. Um Sichten für ein EDM vorzugenerieren, das für eine ASP.NET-Website verwendet wird, sollten Sie das EDM in einer separaten Klassenbibliothek erstellen, der folgenden Prozedur für das Klassenbibliotheksprojekt folgen und im ASP.NET-Websiteprojekt auf das Klassenbibliotheksprojekt verweisen. Möglicherweise ist es vorzuziehen, ein ASP.NET-Webanwendungsprojekt anstelle einer ASP.NET-Website zu verwenden. In diesem Fall können mithilfe der Vorgehensweisen in diesem Thema vorgenerierte Sichten im gleichen Projekt eingefügt werden, wie die ASP.NET-Webanwendung. |
Um die Konsistenz mit der aktuellen Version des EDM sicherzustellen, werden vorgenerierte Sichten zur Laufzeit überprüft. Damit wird sichergestellt, dass die Sichten dem EDM entsprechen. Sie können die erste Prozedur überspringen, wenn beim Erstellungsprozess bereits Modell- und Mappingdateien im Ausgabeverzeichnis generiert werden. In den Prozeduren in diesem Thema wird das Modell "School" verwendet. Sie können dieses Modell erstellen, indem Sie den Schnellstart (Entity Framework) abschließen.
Hinweis |
---|
Um die Prozeduren in diesem Thema auszuführen, ist Visual Studio 2008 Service Pack 1 (SP1) erforderlich. |
So generieren Sie Modell- und Mappingdateien für das Modell "School" im Ausgabeverzeichnis
Doppelklicken Sie im Projektmappen-Explorer auf die Datei School.edmx.
Das Modell "School" wird im Entity Designer angezeigt.
Wählen Sie im Modellbrowser das Modell "SchoolModel" aus, und ändern Sie Verarbeitung der Metadatenartefakte zu In Ausgabeverzeichnis kopieren.
Dadurch wird sichergestellt, dass die Modell- und Mappingdateien im Ausgabeverzeichnis generiert werden.
Erstellen Sie die Projektmappe.
Damit werden die Modell- und Mappingdateien im Ausgabeverzeichnis generiert.
So fügen Sie einem Visual Basic-Projekt das Generieren von Sichten hinzu
Wählen Sie im Projektmappen-Explorer das Projekt aus, für das Sie das Buildereignis angeben möchten.
Klicken Sie im Menü Projekt auf ProjektEigenschaften.
Klicken Sie auf der Seite Eigenschaften auf die Registerkarte Kompilieren.
Klicken Sie auf die Schaltfläche Buildereignisse.
Fügen Sie im Dialogfeld Buildereignisse das folgende Präbuildereignis hinzu (ohne Zeilenumbrüche):
"%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:VB /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.vb"
Klicken Sie auf OK.
Schließen Sie die Seite Projekteigenschaften.
Erstellen Sie die Projektmappe.
Damit wird die Sichtdatei School.Views.cs generiert.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie Vorhandenes Element hinzufügen aus.
Navigieren Sie im Dialogfeld Vorhandenes Element hinzufügen zum Stammordner des Projekts, und wählen Sie die Datei School.Views.vb aus.
Klicken Sie auf Hinzufügen.
Erstellen Sie die Projektmappe.
So fügen Sie einem C#-Projekt das Generieren von Sichten hinzu
Wählen Sie im Projektmappen-Explorer das Projekt aus, für das Sie das Buildereignis angeben möchten.
Klicken Sie im Menü Projekt auf Eigenschaften.
Wählen Sie die Registerkarte Buildereignisse aus.
Fügen Sie im Fenster Befehlszeile für Präbuildereignis das folgende Präbuildereignis hinzu (ohne Zeilenumbrüche):
"%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:CSharp /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.cs"
Erstellen Sie die Projektmappe.
Damit wird die Sichtdatei School.Views.cs generiert.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie Vorhandenes Element hinzufügen aus.
Das Dialogfeld Vorhandenes Element hinzufügen wird angezeigt.
Navigieren Sie zum Stammordner des Projekts, und wählen Sie die Datei School.Views.cs aus.
Klicken Sie auf Hinzufügen.
Erstellen Sie die Projektmappe.
So fügen Sie Mapping- und Modelldateien als eingebettete Ressourcen für ASP.NET-Projekte erneut hinzu
Klicken Sie im Menü Projekt auf Vorhandenes Element hinzufügen.
Navigieren Sie zum Ausgabeverzeichnis für das Projekt, wählen Sie School.csdl aus, und klicken Sie dann auf OK.
Wählen Sie im Projektmappen-Explorer die hinzugefügte Datei aus.
Legen Sie unter Eigenschaften die Option Buildvorgang auf Eingebettete Ressource fest.
Wiederholen Sie die Schritte 1 bis 3 für die Dateien School.ssdl und School.msl.
Doppelklicken Sie im Projektmappen-Explorer auf die Datei App.config, und ändern Sie anschließend den Metadata-Parameter des connectionString-Attributs unter Verwendung eines der folgenden Formate:
Metadata=``res://<assemblyFullName>/<resourceName>;
Metadata=``res://*/<resourceName>;
Metadata=res://*;
Der
resourceName
kann den Projektnamespace enthalten. Weitere Informationen finden Sie unter Verbindungszeichenfolgen (Entity Framework).