Wie konfiguriere ich das Entity Framework Caching?

Caching mit Entity Framework

Das Entity Framework ist eine Reihe von Technologien in ADO.NET, die die Entwicklung datenorientierter Softwareanwendungen unterstützen. Mit dem Entity Framework können Entwickler beim Umgang mit Daten auf einer höheren Abstraktionsebene arbeiten und datenorientierte Anwendungen mit weniger Code als in herkömmlichen Anwendungen erstellen und warten.

NCache stellt den Caching-Anbieter vor, der zwischen Entity Framework und der Datenquelle agiert. Der Hauptgrund hinter der EF-Caching-Anbieter besteht darin, Datenbankauslösungen (die die Anwendungsleistung verlangsamen) zu reduzieren und das Abfrageergebnis aus dem Cache bereitzustellen. Der Anbieter agiert zwischen dem ADO.NET-Entitätsframework und der ursprünglichen Datenquelle. Daher können Caching-Anbieter eingesteckt werden, ohne den aktuellen Code zu ändern/kompilieren.

Integrationsmodi

NCache Der Entity Framework Caching-Anbieter arbeitet in zwei Modi. Es kann entweder in "Caching" oder in "Analyse"-Modus. Im Caching-Modus können Sie die Ergebnismenge ausgewählter Abfragen zwischenspeichern. Der Analysemodus arbeitet im Pass-Through-Modus und hilft Ihnen, die Abfragen zu finden, die zwischengespeichert werden sollten, indem er einen Bericht generiert, der zeigt, welche Abfragen mit welcher Häufigkeit aufgerufen werden. Weitere Hilfe zu Integrationsmodi

Datenbank Synchronisierung

NCache Der Entity Framework-Anbieter stellt außerdem sicher, dass Daten im Cache immer mit der Datenbank synchronisiert werden. Deshalb NCache verwendet .NET SqlCacheDependeny Dadurch wird eine SQL-Abfrage bei SQL Server registriert. Wenn also eine Zeile in dem durch diese Abfrage dargestellten Dataset in der Datenbank geändert wird, gibt SQL Server eine Ereignisbenachrichtigung an aus NCache. NCache entfernt dann die entsprechende Ergebnismenge aus dem Cache.

So integrieren Sie NCache mit Entity Framework?

Voraussetzungen:

1. Sie sollten über eine Entity Framework-Anwendung verfügen. (Sie können auch die Beispielanwendung für EFCaching von verwenden NCache Beispielanwendungen aus dem folgenden Pfad:
"Installiertes Verzeichnis:/ProgramFiles/NCache/samples/clr20/EntityDataModelIntegrationDemo"

In jeder Entity Framework-Anwendung ist das ADO.NET Entity Data Model bereits hinzugefügt, das automatisch zwei Dateien generiert:

  • SSDL
  • Anwendungs- (oder Web-) Konfigurationsdatei

2. Microsoft Visual Studio 2010 für Entity Framework 3.5 und 4.0 und Microsoft Visual Studio 2012/2013 für Entity Framework 6.0 und 6.1

3. Datenbanktool (z. B. MS SQL SERVER 2008, ORACLE)

Schritte zum Aktivieren NCache Caching

Schritt 1: Referenz hinzufügen

Speichern Alachisoft.Integrations.EntityFramework.CachingProvider Verweis auf Ihre Entity Framework-Anwendung. Diese DLL-Datei wird im folgenden Pfad abgelegt:
"Installationsverzeichnis:/ProgramFiles/NCache/integration/MSEntityFramework"
Nach dem Hinzufügen der Referenz sind Änderungen in 3 verschiedenen Dateien erforderlich:

Schritt 2: SSDL-Konfigurationen (für Entity Framework 3.5 und 4.0)

In der SSDL-Datei, die beim Hinzufügen des ADO.NET Entity Data Model in der Entity Framework-Anwendung generiert wird, sind folgende Änderungen erforderlich:

Unten sind die Beispieländerungen für eine SQL 2008-Datenbank;

In SSDL wird der Anbietername im Provider-Attribut der angegeben Element wie unten gezeigt:

[Vorhandener Code]

<Schema Namespace = "NorthwindModel.Store" Alias = "Self" Provider = "System.Data.SqlClient" ProviderManifestToken = "2005" 
xmlns:store ="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" 
xmlns ="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">

Um unsere zu spritzen NCache Entity Framework Provider, müssen wir die oben hervorgehobenen Attribute überschreiben, um unseren Provider zu integrieren. In SSDL setzen wir den Namen des neuen Anbieters in das Provider-Attribut und verketten den vorherigen Anbieter mit unserem Anbietermanifest-Token in der ProviderManifestToken Feld, wie unten gezeigt:

[Geänderter Code]

<Schema Namespace = "NorthwindModel.Store" Alias = "Self" 
Provider = "Alachisoft.Integrations.EntityFramework.CachingProvider"
ProviderManifestToken = "System.Data.SqlClient;2005" 
xmlns:store = "http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" 
xmlns = "http://schemas.microsoft.com/ado/2006/04/edm/ssdl">

Schritt 3: Anwendungs- (oder Web-) Konfigurationen

Anwendungs- (oder Web-) Konfigurationsdatei, die beim Hinzufügen des ADO.NET Entity Data Model in der Entity Framework-Anwendung generiert wird, erfordert die folgenden Änderungen:

Entitätsframework 3.5 und 4.0

  • Der unveränderliche Name des Anbieters wird in der Verbindungszeichenfolge der Anwendungs- oder Webkonfigurationsdatei angegeben:

    <connectionStrings>
        <add name="NorthwindEntities" 
        connectionString="metadata=res://*/NorthwindCustomerModel.csdl
        |res://*/NorthwindCustomerModel.ssdl
        |res://*/NorthwindCustomerModel.msl;
        provider=System.Data.EntityClient;
        provider connection string="
        Data Source=localhost;Initial Catalog=Northwind;user id= userid;
        password=password;MultipleActiveResultSets=True"" 
        providerName="System.Data.EntityClient"/>
    </connectionStrings>
  • Ändern Sie den Namen des Anbieters in NCache Entity Framework Provider und fügen Sie auch die Provider-Wrapper-Informationen in der Verbindungszeichenfolge hinzu, wie unten gezeigt:

    <connectionStrings>
        <add name="NorthwindEntities" 
        connectionString="metadata=res://*/NorthwindCustomerModel.csdl
        |res://*/NorthwindCustomerModel.ssdl
        |res://*/NorthwindCustomerModel.msl;
        provider=Alachisoft.Integrations.EntityFramework.CachingProvider;
        provider connection string="
        wrappedProvider=System.Data.SqlClient;        
        Data Source=localhost;Initial Catalog=Northwind;user id= userid;
        password=password;MultipleActiveResultSets=True"" 
        providerName="System.Data.EntityClient"/>
    </connectionStrings>
    
  • Fügen Sie auch die Provider-Factory für die Initialisierung von hinzu NCache Entity Framework-Anbieter. Das unveränderliche Attribut sollte mit dem Anbieternamen in der Verbindungszeichenfolge identisch sein.

  • <DbProviderFactories>
        <add name="EF Caching Data Provider" 
        invariant="Alachisoft.Integrations.EntityFramework.
        CachingProvider" 
        description="Caching Provider Wrapper" 
        type="Alachisoft.NCache.Integrations.
        EntityFramework.EFCachingProviderFactory, 
        Alachisoft.Integrations.EntityFramework.
        CachingProvider, 
        Version=1.0.0.0,
        Culture=neutral,
        PublicKeyToken=cff5926ed6a53769"/>
    </DbProviderFactories>
    

Entity Framework 6.0

  • Der unveränderliche Name des Anbieters wird auch in der Anwendungs- (oder Web-) Konfigurationsdatei angegeben:

    <entityFramework>
        <providers>
    		<provider invariantName="System.Data.SqlClient"
          type="System.Data.Entity.SqlServer.SqlProviderServices,
           EntityFramework.SqlServer" />
        </providers>
    </entityFramework>
  • Ändern Sie den unveränderlichen Namen in EFCachingProviderServices und tippe auf Alachisoft.NCache.Integrations.EntityFramework.EFCachingProviderServices, Alachisoft.Integrations.EntityFramework.CachingProvider wie unten dargestellt:

  • <entityFramework>
        <providers>
            <provider invariantName="EFCachingProviderServices" 
            type="Alachisoft.NCache.Integrations.EntityFramework.EFCachingProviderServices,
             Alachisoft.Integrations.EntityFramework.CachingProvider" />
        </providers>
    </entityFramework>

    Entity Framework 6.1

  • Fügen Sie einen Interceptor im Anbieterabschnitt in der Anwendungs- (oder Web-) Konfigurationsdatei hinzu:

    <entityFramework>
        <providers>
            <provider invariantName="System.Data.SqlClient"
             type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
       
        <interceptors>
    		<interceptor type="Alachisoft.NCache.Integrations.EntityFramework.Caching.EFCommandInterceptor,
             Alachisoft.Integrations.EntityFramework.CachingProvider" />
        </interceptors>
    </entityFramework>
    
  • Die folgenden Informationen sollten in den App-Einstellungen von hinzugefügt werden app.config/web.config:

    <appSettings> <add key = "app-id" value = "PersonNameApp2"/> <add key = "logging-level" value = "Debug"/> </appSettings>
    
    1. App-ID : Dies ist die Kennung für die aktuelle Anwendung. Diese ID wird zum Lesen der Konfiguration aus efcaching.ncconf verwendet
    2. Logging-Ebene : Legen Sie die Protokollierungsebene für die Anwendung fest. Unser Provider protokolliert Ausnahmen und Fehler nur, wenn das Level auf gesetzt ist Fehler. Wenn die Ebene auf Debug gesetzt ist, werden sowohl Ausnahmen/Fehler als auch andere detaillierte Informationen protokolliert. Wenn der Pegel auf eingestellt ist, wird nichts protokolliert Off (Ursprünglich). Pfad, in dem Protokolldateien generiert werden: Standard = /log-files/efcaching-logs/
    3. Um die oben genannten Änderungen anzuwenden, sollte die Anwendung neu gestartet werden, nachdem diese Änderungen vorgenommen wurden

Anmerkungen: Die App-ID für efcaching.ncconf sollte dieselbe sein wie in der Anwendung (app.config), andernfalls wird ein Fehler ausgegeben)

Alternative Methode

Entity Framework 3.5 oder 4.0

Neben der Angabe der Verbindungszeichenfolge in app.config/web.config kann die Verbindung auch beim Erstellen angegeben werden ObjectContext or EntityConnection. Beim programmgesteuerten Erstellen einer Verbindungszeichenfolge müssen die Wrapperinformationen in einer Verbindungszeichenfolge enthalten sein. So kann die Verbindungszeichenfolge erstellt und erstellt werden ObjectContext or EntityConnection initialisiert werden kann.

try
  {
      SqlConnectionStringBuilder sqlConnBuilder =     new SqlConnectionStringBuilder();
      sqlConnBuilder.DataSource = "localhost";
      sqlConnBuilder.InitialCatalog = "EFTestDB";
      sqlConnBuilder.IntegratedSecurity = true;
      string conString = sqlConnBuilder.ToString();
      EntityConnectionStringBuilder efConnBuilder = new EntityConnectionStringBuilder();
      efConnBuilder.Provider = "EFCachingProvider";
      efConnBuilder.ProviderConnectionString = @"wrappedProvider=System.Data.SqlClient;" + conString;
      efConnBuilder.Metadata = "res:// /NorthwindCustomerModel.csdl|res:" + "// /NorthwindCustomerModel.ssdl|res:" +"// /NorthwindCustomerModel.msl;";
      EntityConnection connection = new EntityConnection(efConnBuilder.ToString());
  }
  catch (Exception ex)
  { 
      // handle exception
  }

Entity Framework 6.0

Neben der Angabe der Anbieterinvariante in app.config/web.config kann die Anbieterinvariante beim Initialisieren der Konfiguration (Klasse, die DbConfiguration erbt) angegeben werden. So kann die Provider-Invariante angegeben werden:

try
{
    this.SetProviderServices("EFCachingProviderServices", EFCachingProviderServices.Instance);
}
catch (Exception ex)
{ 
    // handle exception
}

Entitätsrahmen 6.1

Neben der Angabe des Datenbank-Interceptors in app.config/web.config kann der Datenbank-Interceptor beim Initialisieren der Konfiguration (Klasse, die DbConfiguration erbt) angegeben werden. So kann der Interceptor angegeben werden:

try
{
    this.AddInterceptor(new EFCommandInterceptor());
}
catch (Exception ex)
{ 
    // handle exception
}

Über API (6.0 und 6.1)

Benutzer können jetzt auch Ergebnisse mithilfe der bereitgestellten Erweiterung zwischenspeichern IQueryable.

  • Geben Sie den Namensraum an

    using Alachisoft.NCache.Integrations.EntityFramework.Caching;
  • Rufen Sie Cache-Methodenüberladungen jetzt ab IQueryable Instanz

    var students = from s in db.Students
                   select s;
    students.Cache(); 
    // results are not cached yet
    foreach (Student student in students) 
    //results are cached when enumerator from query is iterated completely
    	{
    	  //using student
    	}

Schritt 4: efcaching.ncconf-Konfigurationen:

Änderungen in "efcaching.ncconf" erforderlich.

  1. Efcaching.ncconf wird im folgenden Pfad abgelegt: „Installeddirectory:/Program Files/NCache/config".
  2. Die Anbieterkonfiguration enthält Informationen zu Cache und Caching-Richtlinien. Nachfolgend sind die in efcaching.ncconf erforderlichen Änderungen aufgeführt.

    <configuration>
          <app-config app-id = "PersonNameApp" mode = "analysis|caching">
  3. Der „Analyse“-Modus wird verwendet, um zu überwachen, wie oft jede Abfrage ausgeführt wird, und generiert dann einen Bericht. Der Bericht enthält den Abfragetext und die Anzahl der Anrufe für jede Abfrage. Dieser Bericht kann in benutzerdefinierten Richtlinien verwendet werden. In diesem Modus wird kein Caching durchgeführt.

    <analysis-policy log-path = "" analysis-time = "1min" cache-enable-threshold = "1" default-expiration-type = "Sliding" default-expiration-time = "180sec" dbsyncdependency= "false"/>
  4. Protokollpfad: Pfad, unter dem Analyseprotokolldateien generiert werden.
    Standard = < Installationsverzeichnis > /log-files/efcaching-analyse-logs/

  5. Für den „Caching“-Modus speichert der Wrapping-Anbieter die Ergebnisse aller angegebenen Abfragen zwischen. Beide Richtlinien haben ihre eigenen Spezifikationen. Immer wenn eine Aktualisierung (entweder UPDATE, INSERT oder DELETE) in einer entsprechenden Datenbank erkannt wird, macht der Anbieter betroffene Cache-Einträge ungültig, indem er alle zwischengespeicherten Abfragen entfernt, die von einer der aktualisierten Tabellen abhängig waren.

    <cache-policy-configuration database = "none|sqlserver|oracle" cache-id = "mycache">  
  6. Für benutzerdefinierte Richtlinien enthält es eine vom Benutzer konfigurierbare Liste von Abfragen, die mit ihren Ergebnissen zwischengespeichert werden sollten. Es werden nur die Abfrageergebnisse zwischengespeichert, für die das Caching aktiviert ist. Sie können für alle Abfragen eine benutzerdefinierte Caching-Richtlinie festlegen.

    <!--sql-query = "SELECT [Extent1].[CustomerID] AS [CustomerID],= @param_0"-->
    	<query>
            <cache-query query text="SELECT [Extent1].[OrderID] AS [OrderID], < @param_0"/>
                <cache-policy vary-by-cache-param="param_0" expiration-type="Sliding"
                 enabled="True" expiration-time="180sec" dbsyncdependency="False"/>
    	</query>
  7. Bei gespeicherten Prozeduren ist der Abfragetext der Name einer gespeicherten Prozedur, und es gibt keine Standardrichtlinien- oder Datenbanksynchronisierungsabhängigkeit. Der Benutzer kann das Ergebnis gespeicherter Prozeduren nur mit Ablauf zwischenspeichern, hier ist keine Datenbankabhängigkeit erforderlich.

  8. Bei Zwischenspeicherung auf API-Ebene (unterstützt in Entity Framework 6.0 und 6.1) können Sie Abfragen mithilfe der im Namespace bereitgestellten Erweiterungsmethode zwischenspeichern
    using Alachisoft.NCache.Integrations.EntityFramework.Caching;
    und Sie können die Caching-Richtlinie für das Caching auf API-Ebene in der Konfigurationsdatei im folgenden Tag bereitstellen:

    <api-level-caching expiration-type="sliding|absolute" enable="True|False"
     expiration-time="120sec" dbsyncdependency="True|False">
    
© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.