ホームページ  >  記事  >  バックエンド開発  >  Entity Framework カスタム ページング効果の実装チュートリアル

Entity Framework カスタム ページング効果の実装チュートリアル

巴扎黑
巴扎黑オリジナル
2017-08-12 16:39:232309ブラウズ

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

はじめに

を参照してください。 Dapper に基づくページングの実装を説明しました。次に、Entity Framework に基づくページングの実装と、追加、削除、および変更の汎用実装を作成してみましょう。

コード

最初にコードをアップロードします: https://github.com/jinweijie/EF.GenericRepository

例の実行方法

以前と同様:

1. コードを複製します。まず、Database

2のDatabase.7zを解凍します。Sql Server LocalDBにアタッチします。 SQL Server の LocalDB を使用していない場合は、App.Config で接続文字列を変更する必要があります。

3. Ctrl + F5 を押してサンプル プログラムを実行します。

リポジトリ基本クラス - クエリ

CommonAbstractRepository.cs は、追加、削除、変更、クエリのいくつかのメソッドを実装するリポジトリの基本クラスです。 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)

なお、トランザクションの実装に関しては、複数のリポジトリが DBContext を共有する Unit of Work モードを使用しました。UOW については、CommonUnitOfWork を参照してください。 .cs。

UOW を呼び出す場合、基本的には次のようになります:

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)

UnitOfWork から 1 つ以上のリポジトリを取得し、DBContext を共有し、追加、削除、および変更操作を実行し、最後に uow が SaveChanges を統合します。

Repositoryの派生クラス

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


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();

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


データベースを最初に実装することを好みます。最初にデータベースを設計します。次に、edmx リバース エンジニアリングを使用して、POCO を生成します。 Entityディレクトリ内の関連ファイルを参照できます。

もちろん、Code First が気に入っている場合は問題ありません。この記事の実装は引き続き適用されます。

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

Entity Framework を使用する場合は、開発段階で潜在的なパフォーマンスの問題を発見し、混乱を避けることができるように、EF によって生成された SQL に注意を払うことが最善です。運用環境:)

CommonEFContext.cs には、EnableTraceSql という設定項目があり、これが true の場合、EF によって生成された SQL が nlog によって記録されます。データベースへの nlog ログを構成しました。つまり、サンプル プロジェクトを実行すると、クエリを実行するたびに新しいログ レコードが追加され、その内容はクエリ中に生成された SQL です。このような実装では、他のユーザーによって呼び出されるように記述されたインターフェイスの場合、クエリ パラメーターを明確に決定できます。次に、次のように呼び出します。このクエリ メソッド コードから、クエリ条件が LevelName と Message が等しく、Message が Like であることが明確にわかります。これらは、適切にカプセル化されている LogSearchSpeficiation に実装されています。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。