いくつかのEFコアパフォーマンス最適化で、プログラムを高速化します。

いくつかのEFコアパフォーマンス最適化で、プログラムを高速化します。

いくつかの提言

最后更新 2022/05/04 15:41
清和时光
预计阅读 2 分钟
分类
EF Core
标签
.NET C# EF Core パフォーマンスの最適化 ORM

1. EF.Functions.xxxを使用したクエリ

1.1 EF.Functions.Likeを使用したファジィ·クエリは、StartsWith、Contains、EndsWithメソッドで生成されたSQL文よりも優れたパフォーマンスを発揮します。

A.。Containsステートメント。生成されるSQLは次のとおりです。

var data3 = dbContext.T_UserInfor.Where(u => u.userName.Contains("p")).ToList();

Charindexを使う

B.。EF. Functions.Like文は次のようなSQLを生成します(SQLクエリのワイルドカード文字で使用します)。

var data1 = dbContext.T_UserInfor.Where(u => EF.Functions.Like(u.userName, "%p%")).ToList();
//或者
var data2 = (from p in dbContext.T_UserInfor
              where EF.Functions.Like(p.userName, "%p%")
              select p).ToList();

使用するのはLike

PS:在传统的.Net 中,还有种用法 SqlMethods,详见:https://www.cnblogs.com/yaopengfei/p/11805980.html

1.2.また、EF. Functions.DateDiffDay DateDiffHour、DateDiffMonthは、日、時間、月の数を求めます。

PS EF Coreでは、StartsWith、Contains、EndsWithの各クエリは、実際にはLikeではなくLeft、CharIndex、Rightに解決され、EF.Functions.LikeはLike文に解決されます。

详见:https://www.cnblogs.com/tdfblog/p/entity-framework-core-like-query.html

2. Z.EntityFramework.Plus.EFCore依存関係の追加特殊構文を使用

これは無料ですが、Z.EntityFramework.Plusの一部の一括データ操作パッケージは有料です。

  1. EFCoreの削除は、削除する前にクエリを実行する必要があります。最適化後に直接削除できます。
context.User.Where(t => t.Id == 100).Delete();
  1. 更新文の最適化
context.User.Where(t => t.Id == 4).Update(t =>new User() { NickName = "2224114" ,Phone = "1234"} );

3. FirstOrDefault t=> t.id =10の代わりに、Find id=10を正しく使用します。

Findはキャッシュを優先し、以前にこのデータをクエリした場合に使用します。FirstOrDefaultは毎回データベースをクエリします。id=10のデータが変更されると、findが検出するデータは新しいデータです。

4. エンティティ追跡を無効にする

データベースからデータをクエリすると、コンテキストはエンティティのスナップショットを作成してエンティティを追跡します。SaveChangesを呼び出すと、エンティティの変更はデータベースに保存されます。

しかし、エンティティをクエリするだけで変更する必要がない場合(読み取り専用)、エンティティ追跡は役に立ちません。AsNoTrackingを呼び出して非追跡データを取得し、クエリのパフォーマンスを向上させることができます。具体的なコードは:

var users = db.Users.AsNoTracking().ToList();

*** 注意:複数のテーブルを検索する場合は、検索前にお問い合わせください **

db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

これにより、すべてのテーブルクエリが非追跡状態になります。

5. クエリされたリストに値があるかどうかを判断するときは、.Anyを使用し、.Count; .FirstOrDefaultはなるべく使用しない

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2022/06/02

EF Core 6の新機能概要(4)

この記事では、SQLite、インメモリプロバイダ、およびEF. Functions.Containsメソッドに対するEF Coreの改善点について説明します。

继续阅读
同分类 / 同标签 2022/06/02

EF Core 6の新機能概要(2)

前回の記事に続き、この記事では、バリューコンバータ、足場、Db Contextの改善など、EF Core 6の10の新機能を紹介します。

继续阅读