EF 코어 컨텍스트의 캐시 핸들
NCache의 EF Core Extension Methods는 캐시를 통해 직접 엔터티를 처리할 때 유연성을 허용합니다. 이러한 API는 데이터 소스를 포함하지 않으므로 데이터 소스를 수정하지 않고도 데이터가 캐시에서 직접 입력되고 제거됩니다. 이러한 API는 자주 변경되지 않는 데이터에 유용합니다.
주의 사항
이 기능은 다음에서도 사용할 수 있습니다. NCache Professional.
활용하기 위해 NCache EF Core API는 애플리케이션에 다음 네임스페이스를 포함합니다.
NCache 캐싱을 위해 다음 API를 제공합니다.
EF 핵심 컨텍스트: 캐시 인스턴스 가져오기
캐시 핸들은 캐시 가져오기, NCache 애플리케이션 확장에 대한 EF Core 확장 방법 DbContext
클래스입니다.
public partial class NorthwindContext : DbContext
{
// Class configures cache with NCacheConfiguration.Configure() method
}
캐시 전용 API 호출은 Cache
래퍼가 반환될 때 캐시 가져오기 메소드가 호출됩니다. 캐시 래퍼는 사용 중인 컨텍스트와 연결됩니다. 엔터티 및 해당 요청은 필요한 작업이 호출되기 전에 해당 유형에 대해 확인됩니다. 이 검증은 초기화될 때 초기화되는 컨텍스트의 도움으로 이루어집니다. 캐시 가져오기 통화가 이루어졌습니다. 따라서 요청을 성공적으로 실행하려면 요청이 이루어질 때 컨텍스트가 활성 상태(삭제되지 않음)여야 합니다. 그렇게 하지 않으면 던질 것입니다 System.ObjectDisposedException
.
따라서 코드에서는 컨텍스트 내에서 캐시 전용 작업을 수행하는 것이 좋습니다.
중대한
캐시가 초기화되지 않으면 예외가 발생하고 캐시가 초기화될 때까지 추가로 수행해야 하는 모든 작업이 실패합니다.
using (var context = new NorthwindContext())
{
Cache cache = context.GetCache(); // get NCache instance
// Perform cache only operations
}
끼워 넣다
XNUMXD덴탈의 끼워 넣다 메서드는 데이터베이스에 대한 종속성 없이 엔터티를 캐시에 직접 추가합니다. 새 고객을 데이터베이스에 저장하고 이전에 추가된 모든 고객을 이미 캐시에 가져왔을 수 있습니다. 나중에 새로운 고객을 데이터 소스에서 캐시로 가져오기 위해 LINQ 쿼리를 실행하는 대신 간단히 다음을 호출할 수 있습니다. 끼워 넣다 고객이 데이터베이스에 추가된 직후( SaveChanges
호출됨) 데이터베이스에 삽입하는 데 사용된 엔터티의 동일한 인스턴스를 사용합니다. 이렇게 하면 한 엔터티의 데이터베이스 이동 비용이 절약됩니다.
엔티티는 다음과 같이 캐시될 수 있습니다. 캐싱 옵션:
QueryIdentifier
Priority
AbsoluteExpirationTime
SlidingExpirationTime
중대한
- 에 대한 가치
StoreAs
isSeparateEntities
, 엔터티는 이 API를 통해 별도의 엔터티로 캐시에 삽입됩니다. - 캐시를 통해 작성된 쿼리가 없기 때문에 이 API를 통해 데이터베이스 종속성을 주입할 수 없습니다. 끼워 넣다. 따라서 CreateDb종속성 재산 캐싱 옵션 이 호출에서는 무시됩니다.
XNUMXD덴탈의 Insert
메소드는 다음과 같이 동작합니다:
케이스 | 행동 |
---|---|
캐시에 존재하지 않는 엔터티 | 캐시에 엔티티 추가 |
캐시에 존재하는 엔터티 | 캐시의 엔티티를 업데이트합니다. |
끼워 넣다 캐시에 저장되는 모든 엔터티에 대해 내부적으로 생성되는 캐시 키를 반환합니다. 이 캐시 키는 나중에 확인 목적으로 사용하거나 캐시 엔터티를 제거하기 위해 저장될 수 있습니다.
예
- 다음 예제에서는 고객엔티티 쿼리 식별자가 있는 캐시에 고객엔티티 그리고
Default
우선 순위.
using (var database = new NorthwindContext())
{
var cust = new Customers
{
CustomerId = "HANIH",
ContactName = "Hanih Moos",
ContactTitle = "Sales Representative",
CompanyName = "Blauer See Delikatessen"
};
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
Priority = Runtime.CacheItemPriority.Default
};
Cache cache = database.GetCache(); // get NCache instance
cache.Insert(cust, out string cacheKey, options);
string key = cacheKey; // can be saved for future use such as removing cache
}
- 이 예에서는 데이터베이스에 삽입되는 동일한 엔터티를 캐시합니다.
using (var database = new NorthwindContext())
{
// Customer entity to be cached and stored to database
var customerEntity = new Customers
{
CustomerId = "HANIH",
ContactName = "Hanih Moos",
ContactTitle = "Sales Representative ",
CompanyName = "Blauer See Delikatessen"
};
// Add customer entity to database
database.Customers.Add(customerEntity);
database.SaveChanges();
// Caching options for cache
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
Priority = Runtime.CacheItemPriority.Default,
};
// Add customer entity to cache
Cache cache = database.GetCache();
cache.Insert(cust, out string cacheKey, options);
string key = cacheKey; // can be saved for future use such as removing cache
}
제거
XNUMXD덴탈의 제거 메서드는 데이터베이스에서 엔터티를 삭제하지 않고 캐시에서 엔터티를 제거합니다. 이는 캐시된 엔터티를 일시적으로 변경했거나 엔터티가 오래되었을 수 있는 경우에 유용합니다. 캐시에서 엔터티를 제거하면 다음 중 하나를 통해 데이터 소스에서 새로운 데이터를 로드할 수 있습니다. FromCache
or LoadIntoCache
방법.
이 API에는 두 개의 오버로드가 있습니다. 하나는 엔터티를 사용하고 다른 하나는 엔터티에 해당하는 캐시 키를 사용합니다. 이 키는 다음 중 반환됩니다. Insert/FromCache/LoadIntoCache
엔터티가 캐시에 추가되어 저장될 수 있을 때 호출됩니다.
public void Remove(object entity);
public void Remove(string cacheKey);
예
- 다음 예에서는 제공된 엔터티를 기반으로 캐시 엔터티를 제거합니다. 캐시에 존재하는 경우 제거됩니다.
using (var database = new NorthwindContext())
{
var cust = new Customers
{
CustomerId = "HANIH",
ContactName = "Hanih Moos",
ContactTitle = "Sales Representative",
CompanyName = "Blauer See Delikatessen"
};
ICache cache = database.GetCache();
cache.Remove(cust);
}
- 다음 예에서는 캐시 키를 인수로 사용합니다. 키에 대한 엔터티가 캐시에 존재하는 경우 해당 엔터티는 캐시에서 제거됩니다.
using (var database = new NorthwindContext())
{
Cache cache = database.GetCache();
cache.Remove(cacheKey); // cacheKey saved during Insert()/FromCache()/LoadIntoCache() calls
}
RemoveByQueryIdentifier
XNUMXD덴탈의 RemoveByQueryIdentifier 메서드는 지정된 기준에 따라 캐시에서 모든 엔터티를 제거합니다. QueryIdentifier
in 캐싱 옵션 (캐시에 삽입할 때) 해당 식별자가 있는 엔터티가 존재하는 경우 연결된 모든 엔터티는 캐시에서 제거되지만 실제 데이터 원본에서는 제거되지 않습니다.
using (var database = new NorthwindContext())
{
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
};
Cache cache = database.GetCache(); // get NCache instance
cache.RemoveByQueryIdentifier(options.QueryIdentifier);
}
도 참조
.그물: Alachisoft.NCache.EntityFrameworkCore 및 Alachisoft.NCache.런타임.캐싱 네임 스페이스.