前回はEntity Framework Coreを使ってAzure SQL Databaseにアクセスし、ComponentOne for ASP.NET MVCのFlexGridでデータを表示してみました。
今回はデスクトップアプリ(Windows Forms、WPF、UWP)でEntity Framework Coreを使ってAzure SQL Databaseにアクセスし、各プラットフォームのFlexGridでデータを表示する方法を紹介します。
- クラスライブラリ(.NET Standard)の作成
- Entity Framework Coreのインストール
- モデルの作成
- デスクトップアプリの作成
- 確認してみる
- 最後に
- 開発者におすすめのフォーラム
Azure SQL Databaseの準備
前回の記事と同じ手順でAzure SQL Databasegrapecitytestdbを準備しておきます。

クラスライブラリ(.NET Standard)の作成
Visual Studioで空のソリューションC1DesktopFlexGridを作成します。

こちらにクラスライブラリ(.NET Standard)EFCoreClassLibraryを追加します。

Entity Framework Coreのインストール
NuGet パッケージを利用してEFCoreClassLibraryにEntity Framework Coreをインストールします。今回必要なEntity Framework CoreのライブラリはMicrosoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Toolsです。

モデルの作成
Azure SQL Databaseに作成したデータベース(AdventureWorksLT)からモデルを作成します。前回と同じ方法でEntity Framework Core ツール(Microsoft.EntityFrameworkCore.Tools)を使ってリバースエンジニアリングすればいいのですが、今回は以下の事前準備が必要です。こちらを設定しないとツールのコマンドを実行した際にエラーが発生します。
EFCoreClassLibrary.csprojを編集して<TargetFramework>netstandard2.0</TargetFramework>を<TargetFrameworks>netcoreapp2.0;netstandard2.0</TargetFrameworks>に置き換えます。

[パッケージ マネージャー コンソール]で次のコマンドを実行して、既存のデータベースからモデルを作成します。Azure SQL Databaseの接続文字列を設定します。
Scaffold-DbContext "コピーした接続文字列をペーストしてください" Microsoft.EntityFrameworkCore.SqlServer
成功するとモデルとコンテキストgrapecitytestdbContext.csが作成されます。

成功したら、EFCoreClassLibrary.csprojファイルを編集して<TargetFrameworks>netcoreapp2.0;netstandard2.0</TargetFrameworks>を<TargetFramework>netstandard2.0</TargetFramework>に置き換えます。元に戻しておかない場合、UWPアプリからこのライブラリが参照できないので注意してください。
デスクトップアプリの作成
デスクトップアプリ(Windows Forms、WPF、UWP)を以下の構成で作成します。EFCoreClassLibraryを各プラットフォームで利用できるようにソリューションC1DesktopFlexGridにWindows Forms、WPF、UWPのプロジェクトを追加します。

各プラットフォームでの作業はこちらです。
アプリケーション(Windows Forms)の作成
アプリケーション(WPF)の作成
アプリケーション(UWP)の作成
アプリケーション(Windows Forms)の作成
C1DesktopFlexGridソリューションにWindows FormsのプロジェクトC1WinFlexGridを追加します。プロジェクトの参照にEFCoreClassLibraryプロジェクト、NugetパッケージMicrosoft.EntityFrameworkCore.SqlServerを追加します。

フォームにFlexGridコントロールを追加します。

コードビハインドでFlexGridのデータソースを設定します。
using EFCoreClassLibrary; using System.Linq; public Form1() { InitializeComponent(); var db = new grapecitytestdbContext(); c1FlexGrid1.DataSource = db.Customer.ToList(); }
アプリケーション(WPF)の作成
C1DesktopFlexGridソリューションにWPFのプロジェクトC1WpfFlexGridを追加します。プロジェクトの参照にEFCoreClassLibraryプロジェクト、NugetパッケージMicrosoft.EntityFrameworkCore.SqlServerを追加します。

フォームにFlexGridコントロールを追加します。

コードビハインドでFlexGridのデータソースを設定します。
using EFCoreClassLibrary; using System.Linq; public MainWindow() { InitializeComponent(); var db = new grapecitytestdbContext(); c1FlexGrid1.ItemsSource = db.Customer.ToList(); }
アプリケーション(UWP)の作成
C1DesktopFlexGridソリューションにUWPのプロジェクトC1UwpFlexGridを追加します。プロジェクトの参照にEFCoreClassLibraryプロジェクト、NugetパッケージMicrosoft.EntityFrameworkCore.SqlServerを追加します。

フォームにFlexGridコントロールを追加します。

以下を参考にライセンスを設定します。
コードビハインドでFlexGridのデータソースを設定します。
using EFCoreClassLibrary; using System.Linq; public MainPage() { this.InitializeComponent(); var db = new grapecitytestdbContext(); c1FlexGrid1.ItemsSource = db.Customer.ToList(); }
なお、現時点ではVisual Studio 15.7.3では以下のようなビルドエラーが発生します。
こちらの回避方法に従ってC1UwpFlexGrid.csprojに<DisableEmbeddedXbf>false</DisableEmbeddedXbf>を追加しておきます。

確認してみる
Visual Studioからそれぞれデバッグ実行してみます。
Windows Forms

WPF

UWP

各プラットフォームのFlexGridでAzure SQL Databaseのデータを表示できていますね!
最後に
今回は各プラットフォームでAzure SQL Databaseのデータを処理するコードを共通化するためにEntity Framework Coreを使いましたが、今後もWindows Forms、WPFを使い続けていくのであればEntity Frameworkを使う機会も多いかと思います。その場合はC1DataSourceが役立ちます。こちらもお試しください!
各プラットフォームのFlexGridを確認できるデモはこちらです。
ComponentOne デモアプリケーション | Developer Tools – グレープシティ株式会社
開発者におすすめのフォーラム
7月10日(火)に弊社の開発支援ツール販売30周年記念フォーラム「Toolsの杜(ツールのもり)」を開催します。
今回の記事でご紹介したようなWindowsネイティブアプリの開発事例のご紹介や、弊社の.NET開発支援コンポーネントの最新動向についてのセッションも行います。ぜひご参加ください。

