目次
前書き
安装或升级到 EF Core 2.0
EF Core 2.0 新功能
改进的 LINQ 翻译
EF.Functions.Like()
分离实体和表
全局查询过滤
LINQ変換の改善
テーブルのすべての列を取得できるのは少数のリクエストだけです

EF Core 2.0の新機能

May 31, 2017 pm 02:39 PM
新機能




前書き

現在、EF Core の最新バージョンは 2.0.0-priview1-final であるため、この記事では主にこのバージョンのいくつかの手順について説明します。 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明。

注意:如果你要在Visual Studio 中使用 .NET Core 2.0 , 你需要至少 Visual Studio 2017 15.3 预览版本。

相关mysql视频教程推荐:《mysql教程

安装或升级到 EF Core 2.0

你可以通过以下命令来安装或者升级你目前的 .NET Core 版本。

// 安装
PM> install-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final

// 升级
PM> update-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final
ログイン後にコピー

工具包

// 直接修改 CSPROJ 文件
<ItemGroup>
   <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" 
       Version="2.0.0-preview1-final" />
</ItemGroup>

// 或者通过以下命令
PM> update-package Microsoft.EntityFrameworkCore.Tools -Pre -Version 2.0.0-preview1-final
ログイン後にコピー

EF Core 2.0 新功能

改进的 LINQ 翻译

  • 避免创建不必要的子查询

  • 一些命令将切换到客户端进行执行

  • 只有少数请求才会检索表的所有列

  • 有事没有适当的过滤条件,将单个LINQ 查询转换为 N + 1 查询。

EF.Functions.Like()

在 EF Core 2.0 中添加了 EF.Functions 属性,EF Core Provider 可以使用它们来自定义一些映射到数据库函数后者运算符的方法,以便于在 LINQ 查询中调用它们。如:

var aCustomers =
    from c in context.Customers
    where EF.Functions.Like(c.Name, "a%");
    select c;
ログイン後にコピー

分离实体和表

分离实体和表什么意思呢?在以前,一个数据库表会映射到 EF 中的一个实体对象,也就是表和实体是一一对应的关系。那么在 2.0 版本中,允许映射一些关联的实体到一个表中,并且EF会维护这些实例或者引用关系。

modelBuilder.Entity<Customer>()
    .OwnsOne(c => c.WorkAddress);public class Customer
{    public int CustomerId { get; set; }    public Address WorkAddress { get; set; }
}public class Address
{    public string Line { get; set; }    public string PostalOrZipCode { get; set; }    public string StateOrProvince { get; set; }    public string CityOrTown { get; internal set; }
}
ログイン後にコピー

在生成数据库表的时候,CustomerAddress 将生成为一个表。

注意:priview1 中此功能暂不完整。

全局查询过滤

新版本引入了一个叫做“垂直过滤”的一个功能,这是一个比较常见的需求。

在我们定义EF Core上下文模型的时候,可以在模型创建的时候附加一些过滤条件,比如在查询的时候总是过滤掉一些“逻辑删除”的数据。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public int TenantId {get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
            .HasQueryFilter(p => !p.IsDeleted &&
                  p.TenantId == this.TenantId );
    }
}
ログイン後にコピー

当通过直接查询或者导航属性(Include())查询类型数据时,将会自动应用此过滤条件。当然你可以使用 IgnoreQueryFilters()

注: Visual Studio で .NET Core 2.0 を使用する場合は、少なくとも Visual Studio 2017 15.3 プレビュー バージョンが必要です。

推奨される mysql ビデオ チュートリアル: "mysql チュートリアル"

インストールまたはアップグレードEF Core 2.0 へ

次のコマンドを使用して、現在の .NET Core バージョンをインストールまたはアップグレードできます。

services.AddDbContextPool<BloggingContext>(
    options => options.UseSqlServer(connectionString));
ログイン後にコピー

ツールキット

private static Func<CustomerContext, int, Customer> _customerById =
    EF.CompileQuery((CustomerContext db, int id) =>
        db.Customers
            .Include(c => c.Address)
            .Single(c => c.Id == id));

...using (var db = new CustomerContext())
{   var customer = _customerById(db, 147);
}
ログイン後にコピー

EF Core 2.0の新機能

LINQ変換の改善

  • 不必要なサブクエリの作成を避ける

  • 一部のコマンドは、実行のためにクライアントに切り替えます

  • テーブルのすべての列を取得できるのは少数のリクエストだけです

  • 適切なフィルター条件なしで単一の LINQ クエリが実行される場合があります N に変換します+1 クエリ。

EF.Functions.Like()

EF Core 2.0 に EF.Functions プロパティが追加されました。EF Core Provider はそれらを使用して、データベース関数と後者の演算子にマップするいくつかのメソッドをカスタマイズできます。これらは LINQ クエリで呼び出すことができます。例:
rrreee

エンティティとテーブルを分離する


エンティティとテーブルを分離するとはどういう意味ですか?以前は、データベース テーブルは EF のエンティティ オブジェクトにマップされていました。つまり、テーブルとエンティティの間には 1 対 1 の対応関係がありました。その後、バージョン 2.0 では、いくつかの関連エンティティをテーブルにマップすることが許可され、EF はこれらのインスタンスまたは参照関係を維持します。

rrreee

データベーステーブルを生成する際、CustomerAddress が 1 つのテーブルとして生成されます。

注: 権限 1 のこの機能はまだ完了していません。

グローバルクエリフィルタリング🎜🎜 新しいバージョンでは、比較的一般的な要件である「垂直フィルタリング」と呼ばれる機能が導入されています。 🎜🎜EF Core コンテキスト モデルを定義する場合、クエリ時に一部の「論理的に削除された」データを常にフィルターするなど、モデルの作成時にいくつかのフィルター条件を追加できます。 🎜rrreee🎜このフィルター条件は、直接クエリまたはナビゲーション プロパティ (Include()) を通じて型データをクエリするときに自動的に適用されます。もちろん、 IgnoreQueryFilters() を使用して、クエリ内でこのグローバル フィルターを無効にすることができます。 🎜🎜DbContext 接続プール🎜🎜通常、ASP.NET Core で EF Core を使用するには、DbContext のカスタマイズが含まれます。DbContext はシステム コンテナーに挿入され、コントローラーのコンストラクターを通じてコン​​テナーからオブジェクト インスタンスが取得されます。これは、🎜リクエストごと🎜に新しいインスタンスが作成されることを意味します。 🎜🎜 EF Core 2.0 では、カスタム DbContext を注入する新しい方法が導入され、インスタンス プールを明示的に使用してコンテナーに注入します。 🎜rrreee🎜このメソッドを使用すると、コントローラーが DbContext インスタンスをリクエストすると、まずプール内に使用可能なインスタンスがあるかどうかが確認され、リクエストが処理されると、インスタンスに関連付けられている状態がすべてリセットされ、その後インスタンスがリセットされます。プールに戻ります。 🎜🎜この概念は ADO.NET のデータベース接続プールに似ており、DbContext インスタンスの初期化コストを節約できるという利点があります。多くの ASP.NET Core アプリケーションは、このアプローチを使用してパフォーマンスを向上させることができます。 🎜🎜クエリを手動でコンパイルする🎜🎜 EF と Linq to SQL の以前のバージョンには、クエリを手動または明示的にコンパイルするための API があり、アプリケーションは変換されたクエリをキャッシュして、クエリを 1 回だけコンパイルして複数回実行することができました。 -レート。 🎜🎜EF Core はクエリ式に基づいてクエリを自動的にコンパイルしてキャッシュできますが、このメカニズムではハッシュ計算やキャッシュをバイパスすることでクエリのパフォーマンスが若干向上します。これにより、アプリケーションは Inquire 呼び出しを通じてコン​​パイルされたデリゲート チェーンを使用できるようになります。 🎜rrreee🎜その他🎜🎜EF Core 2.0 では、一部のログ記録と診断インフラストラクチャに大きな調整が加えられ、Azure Application Insights との統合も行われます。 🎜🎜遅延読み込みの追加はまだ議論中であり、この機能は EF Core 2.1 に追加される可能性があります。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜

以上がEF Core 2.0の新機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 8.3 リリース: 新機能の概要 PHP 8.3 リリース: 新機能の概要 Nov 27, 2023 pm 12:52 PM

PHP8.3 リリース: 新機能の概要 テクノロジーが発展し、ニーズが変化するにつれて、プログラミング言語は常に更新され、改善されています。 Web 開発で広く使用されているスクリプト言語として、PHP は開発者により強力で効率的なツールを提供するために絶えず改良されてきました。最近リリースされた PHP 8.3 バージョンには、待望の新機能と改善点が多数含まれています。これらの新機能の概要を見てみましょう。 null 以外のプロパティの初期化 PHP の過去のバージョンでは、クラス プロパティに明示的に値が割り当てられていない場合、その値は

PHP8 の新機能を学び、最新テクノロジーを深く理解するためのガイド PHP8 の新機能を学び、最新テクノロジーを深く理解するためのガイド Dec 23, 2023 pm 01:16 PM

最新テクノロジーを習得するために役立つ、PHP8 の新機能の詳細な分析 PHP プログラミング言語は、時間の経過とともに常に進化し、改善されています。最近リリースされた PHP8 バージョンは、開発者に多くのエキサイティングな新機能と改善を提供し、開発作業にさらなる利便性と効率をもたらします。この記事では、PHP8 の新機能を詳しく分析し、これらの最新テクノロジーをよりよく習得するのに役立つ具体的なコード例を提供します。 JIT コンパイラー PHP8 では JIT (Just-In-Time) コンパイルが導入されています

php8の新機能は何ですか php8の新機能は何ですか Sep 25, 2023 pm 01:34 PM

php8 の新機能には、JIT コンパイラ、型推論、名前付きパラメータ、共用体型、プロパティ、エラー処理の改善、非同期プログラミングのサポート、新しい標準ライブラリ関数、匿名クラス拡張機能が含まれます。詳細な紹介: 1. JIT コンパイラー、PHP8 は、重要なパフォーマンスの向上である JIT コンパイラーを導入します。JIT コンパイラーは、一部の高頻度の実行コードをリアルタイムでコンパイルおよび最適化できるため、実行速度が向上します。2. 型導出、PHP8型推論機能を導入し、開発者が変数宣言時などに変数の型を自動的に推測できるようにします。

Go 言語の新機能の解釈: プログラミングをより効率的にする Go 言語の新機能の解釈: プログラミングをより効率的にする Mar 10, 2024 pm 12:27 PM

【Go言語の新機能解説:プログラミングを効率化するには具体的なコード例が必要】 近年、ソフトウェア開発の分野でGo言語が注目を集めており、そのシンプルで効率的な設計思想がますます注目を集めています。開発者。 Go 言語は静的型付けプログラミング言語として、開発効率を向上させ、コード作成プロセスを簡素化するための新機能を導入し続けています。この記事では、Go 言語の最新機能を詳しく説明し、これらの新機能によってもたらされる利便性を具体的なコード例を通じて体験する方法について説明します。モジュール開発(GoModules) 1からのGo言語

CSS3 の新機能の概要: CSS3 を使用してトランジション効果を実現する方法 CSS3 の新機能の概要: CSS3 を使用してトランジション効果を実現する方法 Sep 09, 2023 am 11:27 AM

CSS3 の新機能の概要: CSS3 を使用してトランジション効果を実現する方法 CSS3 は CSS の最新バージョンですが、数多くの新機能の中で最も興味深く実用的なのはトランジション効果でしょう。トランジション効果は、インタラクション中にページをよりスムーズで美しくし、ユーザーに優れた視覚体験を提供します。この記事では、CSS3 トランジション効果の基本的な使用法を、対応するコード例とともに紹介します。 transition-property 属性: 遷移する必要がある CSS プロパティの遷移効果を指定します。

PHP8.1 で導入された新しい Redis 拡張機能 PHP8.1 で導入された新しい Redis 拡張機能 Jul 07, 2023 pm 09:41 PM

PHP8.1 で導入された新しい Redis 拡張機能 インターネットの急速な発展に伴い、大量のデータを保存および処理する必要があります。データ処理の効率とパフォーマンスを向上させるために、キャッシュは不可欠な部分になっています。 PHP 開発では、Redis は高性能のキー/値ストレージ システムとして、キャッシュやデータ ストレージのシナリオで広く使用されています。 PHP で Redis を使用するエクスペリエンスをさらに向上させるために、PHP8.1 では新しい Redis 拡張機能が導入されています。この記事では、この拡張機能の新機能と提供内容を紹介します。

Go言語の新機能は何ですか? Go言語の新機能は何ですか? Aug 24, 2023 pm 01:36 PM

Go 言語の新機能は次のとおりです: 1. Go モジュール、Go 言語プロジェクトの依存関係を管理するために使用されます; 2. エラー処理、新しいエラー タイプのエラーを追加し、エラー処理をより柔軟かつ簡潔にします; 3. コンテキスト パッケージ、使用されます。ゴルーチン間でリクエスト範囲の値を転送する; 4. 埋め込み、つまり、ある構造を別の構造に埋め込むことができる; 5. 同期パッケージ、ゴルーチン間の同期と通信をより適切に制御する; 6. エラー値、異なる値をより適切に区別するエラーの種類; 7. ジェネリックを使用すると、開発者はより柔軟に記述できます。

CSS3 の新機能の概要: CSS3 を使用して水平方向の中央揃えのレイアウトを実現する方法 CSS3 の新機能の概要: CSS3 を使用して水平方向の中央揃えのレイアウトを実現する方法 Sep 09, 2023 pm 04:09 PM

CSS3 の新機能の概要: CSS3 を使用して水平方向中央レイアウトを実現する方法 Web デザインとレイアウトでは、水平方向中央レイアウトが一般的な要件です。これまでは、これを実現するために複雑な JavaScript や CSS のトリックを使用することがよくありました。ただし、CSS3 では、水平方向中央揃えのレイアウトをよりシンプルかつ柔軟にするいくつかの新機能が導入されました。この記事では、CSS3 のいくつかの新機能を紹介し、CSS3 を使用して水平方向の中央揃えのレイアウトを実現する方法を示すコード例をいくつか示します。 1. フレックスボックスを使用してファイルをレイアウトする

See all articles