Entity Framework 캐싱을 구성하는 방법은 무엇입니까?

Entity Framework로 캐싱

Entity Framework는 데이터 지향 소프트웨어 응용 프로그램의 개발을 지원하는 ADO.NET의 기술 집합입니다. Entity Framework를 사용하면 개발자는 데이터를 다룰 때 더 높은 추상화 수준에서 작업할 수 있으며 기존 애플리케이션보다 적은 코드로 데이터 지향 애플리케이션을 만들고 유지할 수 있습니다.

NCache Entity Framework와 데이터 소스 간에 작동하는 캐싱 공급자를 소개합니다. 뒤에 주요 이유 EF 캐싱 공급자 데이터베이스 트립(응용 프로그램 성능 저하)을 줄이고 캐시에서 쿼리 결과를 제공하는 것입니다. 공급자는 ADO.NET 엔터티 프레임워크와 원본 데이터 소스 사이에서 작동합니다. 따라서 현재 코드를 변경/컴파일하지 않고 캐싱 공급자를 연결할 수 있습니다.

통합 모드

NCache Entity Framework 캐싱 공급자는 두 가지 모드에서 작동합니다. "캐싱" 또는 "Analysis" 모드. 캐싱 모드에서 선택한 쿼리의 결과 집합을 캐시할 수 있습니다. 분석 모드는 통과 모드에서 작동하며 어떤 쿼리가 어떤 빈도로 호출되는지 보여주는 보고서를 생성하여 캐시해야 하는 쿼리를 찾는 데 도움이 됩니다. 통합 모드에 대한 추가 도움말

데이터베이스 동기화

NCache Entity Framework 공급자는 또한 캐시의 데이터가 항상 데이터베이스와 동기화되도록 합니다. 그러므로 NCache .NET 사용 SqlCache의존성 SQL Server에 SQL 쿼리를 등록하므로 이 쿼리가 나타내는 데이터 세트의 행이 데이터베이스에서 변경되면 SQL Server는 이벤트 알림을 NCache. NCache 그런 다음 캐시에서 해당 결과 집합을 제거합니다.

통합하는 방법 NCache 엔티티 프레임워크로?

전제 조건 :

1. Entity Framework 애플리케이션이 있어야 합니다. (EFCaching에 대한 샘플 애플리케이션을 다음에서 사용할 수도 있습니다. NCache 다음 경로의 샘플 애플리케이션:
"설치된 디렉터리:/프로그램 파일/NCache/samples/clr20/EntityDataModelIntegrationDemo"

모든 Entity Framework 응용 프로그램에는 ADO.NET Entity Data Model이 이미 추가되어 다음 두 파일을 자동으로 생성합니다.

  • SSDL
  • 애플리케이션(또는 웹) 구성 파일

2. Entity Framework 2010 및 3.5용 Microsoft Visual Studio 4.0 및 Entity Framework 2012 및 2013용 Microsoft Visual Studio 6.0/6.1

3. 데이터베이스 도구(예: MS SQL SERVER 2008, ORACLE)

활성화 단계 NCache 캐싱

1단계: 참조 추가

추가 Alachisoft.Integrations.EntityFramework.CachingProvider Entity Framework 애플리케이션에 대한 참조입니다. 이 .dll 파일은 다음 경로에 있습니다.
"설치된 디렉토리:/ProgramFiles/NCache/통합/MSEntityFramework"
참조를 추가한 후 3개의 다른 파일에서 변경이 필요합니다.

2단계: SSDL 구성(Entity Framework 3.5 및 4.0용)

Entity Framework 응용 프로그램에서 ADO.NET Entity Data Model을 추가할 때 생성되는 SSDL 파일에서 다음과 같은 변경이 필요했습니다.

다음은 SQL 2008 데이터베이스에 대한 샘플 변경 사항입니다.

SSDL에서 공급자 이름은 아래와 같이 요소:

[기존 코드]

<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">

우리 주사를 맞으려면 NCache Entity Framework Provider, 위에서 강조 표시된 속성을 재정의하여 공급자를 플러그인해야 합니다. SSDL에서는 Provider 속성에 새 공급자의 이름을 입력하고 이전 공급자를 공급자 매니페스트 토큰과 연결합니다. 공급자매니페스트토큰 다음과 같이 입력란에 표시합니다.

[변경된 코드]

<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">

3단계: 애플리케이션(또는 웹) 구성

Entity Framework 응용 프로그램에서 ADO.NET Entity Data Model을 추가할 때 생성되는 응용 프로그램(또는 웹) 구성 파일은 다음과 같이 변경해야 합니다.

엔터티 프레임워크 3.5 및 4.0

  • 공급자 고정 이름은 응용 프로그램 또는 웹 구성 파일의 연결 문자열에 지정됩니다.

    <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>
  • 공급자 이름을 다음으로 변경 NCache Entity Framework 공급자를 선택하고 아래와 같이 연결 문자열에 공급자 래퍼 정보를 추가합니다.

    <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>
    
  • 또한 초기화를 위해 제공자 팩토리를 추가하십시오. NCache 엔티티 프레임워크 공급자. 고정 특성은 연결 문자열의 공급자 이름과 동일해야 합니다.

  • <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>
    

엔터티 프레임워크 6.0

  • 공급자 불변 이름은 응용 프로그램(또는 웹) 구성 파일에도 지정됩니다.

    <entityFramework>
        <providers>
    		<provider invariantName="System.Data.SqlClient"
          type="System.Data.Entity.SqlServer.SqlProviderServices,
           EntityFramework.SqlServer" />
        </providers>
    </entityFramework>
  • 불변 이름을 다음으로 변경 EFCachingProviderServices 에 입력 Alachisoft.NCache.Integrations.EntityFramework.EFCachingProviderServices, Alachisoft.Integrations.EntityFramework.CachingProvider 다음과 같이 :

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

    엔터티 프레임워크 6.1

  • 애플리케이션(또는 웹) 구성 파일의 공급자 섹션에 인터셉터를 추가합니다.

    <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>
    
  • 의 appSettings에 다음 정보를 추가해야 합니다. app.config/web.config:

    <appSettings> <add key = "app-id" value = "PersonNameApp2"/> <add key = "logging-level" value = "Debug"/> </appSettings>
    
    1. 앱 ID : 현재 애플리케이션의 식별자가 됩니다. 이 ID는 efcaching.ncconf에서 구성을 읽는 데 사용됩니다.
    2. 로깅 수준 : 애플리케이션의 로깅 수준을 결정합니다. 공급자는 수준이 다음으로 설정된 경우에만 예외 및 오류를 기록합니다. 오류. 수준이 디버그로 설정되면 예외/오류 및 기타 자세한 정보가 모두 기록됩니다. 레벨을 다음으로 설정하면 아무것도 기록되지 않습니다. 떨어져서 (기본). 로그 파일이 생성되는 경로: 기본값 = /로그 파일/efcaching-logs/
    3. 위의 변경 사항을 적용하려면 변경 후 응용 프로그램을 다시 시작해야 합니다.

알림: efcaching.ncconf의 App-id는 응용 프로그램(app.config)과 동일해야 합니다. 그렇지 않으면 오류가 표시됩니다.)

대체 방법

엔티티 프레임워크 3.5 또는 4.0

app.config/web.config에서 연결 문자열을 지정하는 것 외에도 생성하는 동안 연결을 지정할 수도 있습니다. ObjectContext or EntityConnection. 프로그래밍 방식으로 연결 문자열을 만드는 동안 래퍼 정보가 연결 문자열에 포함되어야 합니다. 연결 문자열을 만드는 방법은 다음과 같습니다. ObjectContext or EntityConnection 초기화할 수 있습니다.

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
  }

엔터티 프레임워크 6.0

app.config/web.config에서 공급자 고정을 지정하는 것 외에도 구성을 초기화하는 동안 공급자 고정을 지정할 수 있습니다(DbConfiguration을 상속하는 클래스). 공급자 불변을 지정하는 방법은 다음과 같습니다.

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

엔티티 프레임워크 6.1

app.config/web.config에서 데이터베이스 인터셉터를 지정하는 것 외에도 구성을 초기화하는 동안 데이터베이스 인터셉터를 지정할 수 있습니다(DbConfiguration을 상속하는 클래스). 인터셉터를 지정하는 방법은 다음과 같습니다.

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

API(6.0 및 6.1)를 통해

사용자는 이제 다음에 제공된 확장을 사용하여 결과를 캐시할 수도 있습니다. IQueryable.

  • 네임스페이스 지정

    using Alachisoft.NCache.Integrations.EntityFramework.Caching;
  • 지금부터 캐시 메서드 오버로드를 호출합니다. IQueryable

    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
    	}

4단계: efcaching.ncconf 구성:

"efcaching.ncconf"에서 변경이 필요합니다.

  1. Efcaching.ncconf는 "Installeddirectory:/Program Files/" 경로에 있습니다.NCache/구성".
  2. 공급자 구성에는 캐시 및 캐싱 정책 관련 정보가 포함되어 있습니다. 다음은 efcaching.ncconf에 필요한 변경 사항입니다.

    <configuration>
          <app-config app-id = "PersonNameApp" mode = "analysis|caching">
  3. "분석" 모드는 각 쿼리가 실행되는 횟수를 모니터링하고 보고서를 생성하는 데 사용됩니다. 보고서에는 쿼리 텍스트와 각 쿼리에 대한 호출 수가 포함됩니다. 이 보고서는 사용자 지정 정책에서 사용할 수 있습니다. 이 모드에서는 캐싱이 수행되지 않습니다.

    <analysis-policy log-path = "" analysis-time = "1min" cache-enable-threshold = "1" default-expiration-type = "Sliding" default-expiration-time = "180sec" dbsyncdependency= "false"/>
  4. 로그 경로: 분석 로그 파일이 생성될 경로입니다.
    기본값 = < 설치 디렉토리 > /로그 파일/efcaching-analysis-logs/

  5. "캐싱" 모드의 경우 래핑 공급자는 지정된 모든 쿼리의 결과를 캐시합니다. 두 정책 모두 자체 사양이 있습니다. 각 데이터베이스에서 업데이트가 감지될 때마다(UPDATE, INSERT 또는 DELETE) 공급자는 업데이트된 테이블에 종속된 모든 캐시된 쿼리를 제거하여 영향을 받는 캐시 항목을 무효화합니다.

    <cache-policy-configuration database = "none|sqlserver|oracle" cache-id = "mycache">  
  6. 사용자 지정 정책의 경우 결과와 함께 캐시해야 하는 사용자 구성 가능한 쿼리 목록이 포함됩니다. 캐싱이 활성화된 쿼리 결과만 캐싱됩니다. 모든 쿼리에 대해 사용자 지정 캐싱 정책을 지정할 수 있습니다.

    <!--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. 저장 프로시저의 경우 쿼리 텍스트는 저장 프로시저의 이름이 되며 기본 정책 또는 데이터베이스 동기화 종속성은 없습니다. 사용자는 저장 프로시저 결과를 만료 시에만 캐시할 수 있으며 여기에는 데이터베이스 종속성이 필요하지 않습니다.

  8. API 레벨 캐싱(Entity Framework 6.0 및 6.1에서 지원)의 경우 네임스페이스에서 제공하는 확장 메서드를 사용하여 쿼리를 캐싱할 수 있습니다.
    using Alachisoft.NCache.Integrations.EntityFramework.Caching;
    다음 태그의 구성 파일에서 API 수준 캐싱에 대한 캐싱 정책을 제공할 수 있습니다.

    <api-level-caching expiration-type="sliding|absolute" enable="True|False"
     expiration-time="120sec" dbsyncdependency="True|False">
    
© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.