EFコアコンテキストからのキャッシュハンドル
NCacheの EF Core 拡張メソッドを使用すると、キャッシュを通じてエンティティを直接処理する際の柔軟性も確保されます。これらの API にはデータ ソースが関与しないため、データ ソースを変更せずに、データが直接キャッシュに入力され、キャッシュから削除されます。このような API は、頻繁に変更されないデータに便利です。
Note
この機能は以下でも利用できます NCache Professional.
利用するには NCache EF Core API には、アプリケーションに次の名前空間が含まれます。
NCache キャッシュの目的で次のAPIを提供します。
EF Core コンテキスト: キャッシュ インスタンスの取得
キャッシュハンドルは、 GetCache, NCache アプリケーションの拡張された EF Core 拡張メソッド DbContext
とに提供されます。
public partial class NorthwindContext : DbContext
{
// Class configures cache with NCacheConfiguration.Configure() method
}
キャッシュのみのAPI呼び出しは、 Cache
ラッパーが返される GetCache メソッドが呼び出されます。 キャッシュラッパーは、使用中のコンテキストに関連付けられています。 エンティティとそれぞれのリクエストは、必要な操作が呼び出される前に、タイプが検証されます。 この検証は、次の場合に初期化される手元のコンテキストの助けを借りて行われます。 GetCache 電話がかかります。したがって、リクエストを正常に実行するには、リクエストが行われたときにコンテキストが生きている (破棄されていない) 必要があります。そうしないとスローされます System.ObjectDisposedException
.
したがって、コードでは、コンテキスト内でキャッシュのみの操作を実行することをお勧めします。
重要
キャッシュが初期化されていない場合、例外がスローされ、キャッシュが初期化されるまでさらに実行する必要があるすべての操作は失敗します。
using (var context = new NorthwindContext())
{
Cache cache = context.GetCache(); // get NCache instance
// Perform cache only operations
}
インセット
インセット このメソッドは、データベースに依存せずにエンティティをキャッシュに直接追加します。新しい顧客をデータベースに保存していて、以前に追加されたすべての顧客がすでにキャッシュにフェッチされている可能性があります。後で LINQ クエリを実行して新しい顧客をデータ ソースからキャッシュに取得する代わりに、単純に次の関数を呼び出すことができます。 インセット 顧客がデータベースに追加された直後 ( SaveChanges
が呼び出されます)。データベースへの挿入に使用されるエンティティの同じインスタンスを使用します。これにより、1 つのエンティティのデータベース トリップのコストが節約されます。
エンティティは次の方法でキャッシュできます キャッシングオプション:
QueryIdentifier
Priority
AbsoluteExpirationTime
SlidingExpirationTime
重要
- の値
StoreAs
isSeparateEntities
、エンティティはこの API を通じて別個のエンティティとしてキャッシュに挿入されます。 - キャッシュを介してクエリが行われないため、このAPIを介してデータベースの依存関係を注入することはできません。 インセット。 したがって、 CreateDbDependency のプロパティ キャッシングオプション この呼び出しでは無視されます。
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
}
削除します
削除します このメソッドは、データベースからエンティティを削除せずに、キャッシュからエンティティを削除します。これは、キャッシュされたエンティティに一時的な変更を加えた場合、またはエンティティが古い可能性がある場合に便利です。キャッシュからエンティティを削除すると、データ ソースから新しいデータをロードできるようになります。 FromCache
or LoadIntoCache
方法。
この API には 2 つのオーバーロードがあり、1 つはエンティティを受け取り、もう 1 つはエンティティに対応するキャッシュ キーを受け取ります。このキーは、 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
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.ランタイム.キャッシュ 名前空間。