この記事では、Entity Framework に基づくカスタム ページング効果、追加、削除、変更の一般的な実装について詳しく紹介します。興味のある方は、
はじめに
コード
サンプルの実行方法
は、以前と同じです:
1. まずコードを複製し、Database
でDatabase.7zを解凍します。2. SQL Server LocalDBにアタッチします。 SQL Server の LocalDB を使用していない場合は、App.Config で接続文字列を変更する必要があります。
3. Ctrl + F5 を押してサンプル プログラムを実行します。
リポジトリ基本クラス - クエリ
CommonAbstractRepository.cs は、次のような追加、削除、変更、確認のメソッドを実装するリポジトリの基本クラスです。
public virtual Tuple<IEnumerable<T>, int> Find(Expression<Func<T, bool>> criteria , int pageIndex , int pageSize , string[] asc , string[] desc , params Expression<Func<T, object>>[] includeProperties)
includeProperties はマルチテーブル時間にあり、関連するテーブルを結合します。 EF はデフォルトで遅延読み込みに設定されているため、関連付けられたテーブルはデフォルトではすぐにロードされないため、コードを記述するときに注意しないと、for ループで n ワードのテーブルをループする可能性があります。 includeProperties パラメータを使用して、クエリ中に関連テーブルを結合します。
リポジトリ基本クラス - 追加、削除、変更AbstractRepository は、ジェネリックスを使用して追加、削除、変更メソッドを実装しました:
public virtual T Create(Tentity)
public virtual T CreateOrUpdate(Tentity)
public virtual void Delete(TId id)
なお、トランザクションの実装に関しては、Unit of Workモードを使用してDBContextを共有しています。UOWについては、CommonUnitOfWorkで見つけてください。 .cs。
UOW を呼び出す場合、基本的には次のようになります:
var uow = new EFUnitOfWork(); var repo = uow.GetLogRepository(); repo.Create(new Log { LevelId = 1, Thread = "", Location = "Manual Creation", Message = "This is manually created log.", CreateTime = DateTimeOffset.Now, Date = DateTime.Now }); uow.Commit();UnitOfWork から 1 つ以上のリポジトリを取得し、DBContext を共有し、追加、削除、および変更操作を実行し、最後に uow が SaveChanges を統合します。
AbstractRepositoryが既に存在しているため、追加、削除、変更、確認のメソッドが多数実装されているため、サンプルプロジェクトのLogRepositoryなどの派生クラスは基本的に非常にシンプルになり、主に実装することができます。サンプル プロジェクトでは、特別なビジネス ロジックがないため、非常に単純になります:
public class LogRepository : AbstractRepository<Log, int> { public LogRepository(EFContext context) : base(context) { } }
エンティティの生成について
データベースを最初に実装することを好みます。最初にデータベースを設計します。次に、edmx リバース エンジニアリングを使用して、POCO を生成します。 Entityディレクトリ内の関連ファイルを参照できます。
もちろん、Code First が気に入っている場合は問題ありません。この記事の実装は引き続き適用されます。
Entity Framework を使用する場合は、開発段階で潜在的なパフォーマンスの問題を発見し、混乱を避けることができるように、EF によって生成された SQL に注意を払うことが最善です。運用環境:)
CommonEFContext.cs には、EnableTraceSql という設定項目があり、これが true の場合、EF によって生成された SQL が nlog によって記録されます。 nlog ログをデータベースに設定しました。つまり、サンプル プロジェクトを実行すると、クエリを実行するたびに新しいログ レコードが追加され、その内容はクエリ中に生成された SQL です。この実装では、他のユーザーによって呼び出されるように記述されたインターフェイスの場合、クエリ パラメーターを明確に決定できます。次に、これを呼び出します。 query メソッド コードから、私のクエリ条件が LevelName と Message が等しいこと、および Message が Like であることが明確にわかります。これらは、適切にカプセル化されている LogSearchSpeificiation に実装されています。
この一連の実装は過去数年にわたってゆっくりと蓄積され、実践されてきたものであるため、一定の参考として使用する必要があります。 もちろん、特定のプロジェクトでは、いくつかの DI を使用して取得することができます。リポジトリなど、この記事の範囲外ですので、ご自由にプレイしていただければ幸いです。
以上がEntity Frameworkのカスタムページング効果の実装方法を詳しく説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。