ホームページ > バックエンド開発 > C#.Net チュートリアル > Entity Frameworkのカスタムページング効果の実装方法を詳しく説明

Entity Frameworkのカスタムページング効果の実装方法を詳しく説明

巴扎黑
リリース: 2017-08-06 10:53:07
オリジナル
1612 人が閲覧しました

この記事では、Entity Framework に基づくカスタム ページング効果、追加、削除、変更の一般的な実装について詳しく紹介します。興味のある方は、

はじめに

を参照してください。 Dapper に基づく実装を説明しました。次に、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)
ログイン後にコピー

このメソッドはAbstractRepository のクエリ メソッドの 1 つ。カスタム ページング クエリに使用されます。 criteria はクエリ条件としての式であり、パラメーター pageIndex、pageSize、asc、desc はページング関連パラメーターです。 :

includeProperties はマルチテーブル時間にあり、関連するテーブルを結合します。 EF はデフォルトで遅延読み込みに設定されているため、関連付けられたテーブルはデフォルトではすぐにロードされないため、コードを記述するときに注意しないと、for ループで n ワードのテーブルをループする可能性があります。 includeProperties パラメータを使用して、クエリ中に関連テーブルを結合します。

リポジトリ基本クラス - 追加、削除、変更

AbstractRepository は、ジェネリックスを使用して追加、削除、変更メソッドを実装しました:
public virtual T Create(Tentity)

public virtual T Update(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 を統合します。


Repositoryの派生クラス

AbstractRepositoryが既に存在しているため、追加、削除、変更、確認のメソッドが多数実装されているため、サンプルプロジェクトのLogRepositoryなどの派生クラスは基本的に非常にシンプルになり、主に実装することができます。サンプル プロジェクトでは、特別なビジネス ロジックがないため、非常に単純になります:

public class LogRepository : AbstractRepository<Log, int>
  {
    public LogRepository(EFContext context)
      : base(context)
    {
    }
  }
ログイン後にコピー

エンティティの生成について

データベースを最初に実装することを好みます。最初にデータベースを設計します。次に、edmx リバース エンジニアリングを使用して、POCO を生成します。 Entityディレクトリ内の関連ファイルを参照できます。
もちろん、Code First が気に入っている場合は問題ありません。この記事の実装は引き続き適用されます。

Logging ログを使用して EF SQL を追跡します

Entity Framework を使用する場合は、開発段階で潜在的なパフォーマンスの問題を発見し、混乱を避けることができるように、EF によって生成された SQL に注意を払うことが最善です。運用環境:)
CommonEFContext.cs には、EnableTraceSql という設定項目があり、これが true の場合、EF によって生成された SQL が nlog によって記録されます。 nlog ログをデータベースに設定しました。つまり、サンプル プロジェクトを実行すると、クエリを実行するたびに新しいログ レコードが追加され、その内容はクエリ中に生成された SQL です。この実装では、他のユーザーによって呼び出されるように記述されたインターフェイスの場合、クエリ パラメーターを明確に決定できます。次に、これを呼び出します。 query メソッド コードから、私のクエリ条件が LevelName と Message が等しいこと、および Message が Like であることが明確にわかります。これらは、適切にカプセル化されている LogSearchSpeificiation に実装されています。

最後に

この一連の実装は過去数年にわたってゆっくりと蓄積され、実践されてきたものであるため、一定の参考として使用する必要があります。 もちろん、特定のプロジェクトでは、いくつかの DI を使用して取得することができます。リポジトリなど、この記事の範囲外ですので、ご自由にプレイしていただければ幸いです。

以上がEntity Frameworkのカスタムページング効果の実装方法を詳しく説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート