Entity Framework(EF)Coreは、EntityFrameworkオブジェクトリレーショナルマッピングエンジンの再設計および書き直されたバージョンです。 .NET Core アプリケーション。 非常に軽量で、拡張性があり、クロスプラットフォームです。
ただし、高いトランザクション .NET Core を使用するアプリケーション EFコアフェイスパフォーマンス ピーク負荷時のデータベース層におけるスケーラビリティのボトルネック。 これは、アプリケーションサーバーを追加することでアプリケーション層を線形にスケーリングできますが、データベースサーバーを追加してスケーリングすることはできないためです。
ただし、次のような分散キャッシュを使用する場合 NCache 自分で .NET Core アプリケーション、あなたはすぐにこれらを削除することができます パフォーマンスとスケーラビリティのボトルネック 極端なトランザクション負荷を処理します。
拡張メソッドはC#の機能であり、派生クラスを作成せずに既存のクラスと型を拡張できます。 拡張メソッドは特殊な種類の静的メソッドですが、拡張クラスのインスタンスメソッドであるかのように呼び出されます。
NCache 拡張メソッドを介してEFコアにキャッシュ機能を統合しました。 これにより、 NCache 内から EFコアアプリケーション 非常にシンプルで簡単です。 以下は、によって提供されるEFコア拡張メソッドのリストです。 NCache.
EF Coreにキャッシュする最も一般的なデータは、トランザクションデータです。 これは、実行時に作成される頻繁に変更されるデータ(顧客、アカウント、アクティビティなど)であり、アプリケーションが複数回読み取る短時間だけキャッシュします。
FromCache()拡張メソッドを使用すると、の結果セットをキャッシュすることでトランザクションデータをキャッシュできます。 LINQクエリ。 以下の例を参照してください。
//Load suppliers into the cache with the expiration options
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
where supplier.SupplierId < 10
select supplier).FromCache(options);
ここで、このデータをフェッチするためにデータベースに移動する前に、FromCache()メソッドはこのデータのキャッシュをチェックします。 見つかった場合は、キャッシュから返します。 それ以外の場合は、データベースからフェッチし、最初にキャッシュして次回に存在するようにしてから、結果を呼び出し元に返します。
コレクション全体をXNUMXつのアイテムとしてキャッシュにキャッシュするか、すべてのエンティティを分割して個別にキャッシュするかを選択できます。 ブレイクアウトは、これらのエンティティを個別にフェッチまたは更新する場合にも役立ちます。 以下は、このメソッドの非同期バージョンです。
//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
where supplier.SupplierId < 10
select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();
参照データは、完全にキャッシュする必要があるものです。 これにより、実行できます LINQクエリ キャッシュ上でのみ、データベースにアクセスすることはありません。 データセット全体がキャッシュにない場合、LINQクエリの結果は、キャッシュをチェックし、データセット全体がキャッシュにあると想定するだけなので、正しくないことに注意してください。
LoadIntoCache()拡張メソッドを使用すると、EFコアキャッシュにすべての参照データを取り込むことができます。 キャッシュの設定については、以下の例を参照してください。
//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
select product)
.LoadIntoCache(out string cacheKey, options);
すべての参照データをキャッシュにロードしたら、データベースの代わりにLINQクエリを実行できます。 これにより、データベースへの負担が軽減され、アプリケーションのパフォーマンスとスケーラビリティが向上します。 以下の例を参照してください。
//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
where product.Discontinued == true
select product).FromCacheOnly();
EF Core参照データキャッシュにはデータセット全体(この場合はProductsなど)が含まれている必要があることに注意してください。 それ以外の場合、FromCacheOnly()拡張メソッドはデータベースをチェックしないため、キャッシュにあるものだけを返します。 そして、これは正しくない可能性があります。
EF Coreでエンティティに変更を加えるときはいつでも、「Cache」ハンドルを取得して適切なupdateメソッドを呼び出すことにより、EFCoreCacheを更新できます。 以下に例を示します。
// Initialize the database context
NorthwindContext database = new NorthwindContext();
...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
namespace Alachisoft.NCache.EntityFrameworkCore
{
public class Cache
{
public void Insert(object entity, out string cacheKey, CachingOptions options);
public void Remove(object entity);
public void Remove(string cacheKey);
public void RemoveByQueryIdentifier(Tag tag);
}
}
Entity Framework Coreには、キャッシュフレームワークが付属していません( Hibernate します)。 しかし、 NCache は、非常に柔軟で強力でありながら、非常にシンプルなキャッシュフレームワークを開発しました。 次の理由で使用する必要があります。
すべての詳細をご覧ください NCache の機能 エディションの比較 ページ。 についてもっと読む NCache の完全に機能する 30 日間の試用版をダウンロードします。 NCache 以下のリンクから。