EF Core でサポートされている .NET 実装

私達は、最新の .NET 実装を使用するすべての開発者が EF Core を使用できることを希望しており、その目標に向けて取り組んでいます。 EF Core の .NET Core でのサポートは、自動テストされており、多くのアプリケーションで正常に使用できることがわかっていますが、Mono、Xamarin、UWP ではいくつか問題があります。

概要

.NET 実装のガイダンスを下の表にまとめました。

EF Core 3.1 5.0 6.0
.NET & .NET Core 3.1 5.0 6.0
.NET Standard(1) 2.0 2.1
.NET Framework(2) 4.7.2
Mono 5.4 6.4
Xamarin.iOS(3) 10.14 12.16 (.NET 6 を使用)
Xamarin.Mac(3) 3.8 5.16 (.NET 6 を使用)
Xamarin.Android(3) 8.0 10.0 (.NET 6 を使用)
UWP(4) 10.0.16299 (Windows アプリ SDKを使用)
Unity(5) 2018.1 2021.2 TBD
Tizen(6) 4.0 6.0 (.NET 6 を使用)

(1) .NET Standard は、統一性に対する新しいアプローチに置き換わりました。 詳細については、「 .NET Standard の将来」を参照してください。

(2) 以下の「.NET Framework」セクションを参照してください。

(3) Xamarin には問題と既知の制限があり、EF Core を使用して開発された一部のアプリケーションが正しく動作しなくなる可能性があります。 回避策については、アクティブな懸案事項の一覧を確認してください。

(4).NET Core UWP 6.x パッケージをインストールします。 この記事の「ユニバーサル Windows プラットフォーム」のセクションを参照してください。

(5) Unity には問題と既知の制限事項があります。 アクティブな懸案事項の一覧を確認してください。

(6) EF Core と Tizen の互換性はほとんど不明です。 試したことがある場合は、フィードバックをお待ちしております。

.NET Framework

.NET Framework をターゲットとするアプリケーションを .NET Standard のライブラリと連携させるには、次のような変更が必要になる可能性があります。

プロジェクト ファイルを編集し、初期プロパティ グループに次のエントリが表示されるようにします。

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

テスト プロジェクトの場合、次のエントリも必要です。

<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

それよりも古いバージョンの Visual Studio を使用する場合は、必ず NuGet クライアントをバージョン 3.6.0 にアップグレードしてください。これで .NET Standard 2.0 のライブラリと連携できるようになります。

また、可能であれば、NuGet の packages.config を PackageReference に移行することをお勧めします。 次のプロパティをプロジェクト ファイルに追加します。

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

ユニバーサル Windows プラットフォーム

EF Core と .NET UWP の以前のバージョンには、多数の互換性の問題があり、特に .NET ネイティブ ツールチェーンでコンパイルされたアプリケーションの場合に顕著でした。 新しい .NET UWP バージョンでは、.NET Standard 2.0 のサポートが追加され、.NET Native 2.0 が含まれています。これにより、以前に報告されているほとんどの互換性の問題が解決されています。 EF Core 2.0.1 は、UWP でより完全にテストされていますが、テストは自動化されていません。

UWP で EF Core を使用する場合:

  • クエリのパフォーマンスを最適化するには、LINQ クエリで匿名型を回避します。 UWP アプリケーションをアプリ ストアに配置するには、アプリケーションを .NET ネイティブでコンパイルする必要があります。 匿名型のクエリは、.NET ネイティブではパフォーマンスが低下します。

  • SaveChanges() のパフォーマンスを最適化するには、ChangeTrackingStrategy.ChangingAndChangedNotifications を使用し、エンティティ型で INotifyPropertyChangedINotifyPropertyChangingINotifyCollectionChanged を実装します。

問題のレポート

予想どおりに機能しない組み合わせについては、EF Core 問題追跡ツールで新しい問題を登録することが推奨されています。 Xamarin 関連の問題については、 Xamarin.Android または Xamarin.iOS の問題追跡ツールをご利用ください。