デスクトップアプリでEntity Framework Coreを使ってみる

前回はEntity Framework Coreを使ってAzure SQL Databaseにアクセスし、ComponentOne for ASP.NET MVCのFlexGridでデータを表示してみました。

今回はデスクトップアプリ(Windows Forms、WPF、UWP)でEntity Framework Coreを使ってAzure SQL Databaseにアクセスし、各プラットフォームのFlexGridでデータを表示する方法を紹介します。

Azure SQL Databaseの準備

前回の記事と同じ手順でAzure SQL Databasegrapecitytestdbを準備しておきます。

f:id:GrapeCity_dev:20180605165909p:plain:w600

クラスライブラリ(.NET Standard)の作成

Visual Studioで空のソリューションC1DesktopFlexGridを作成します。

f:id:GrapeCity_dev:20180605165639p:plain:w600

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

f:id:GrapeCity_dev:20180605170430p:plain:w300

Entity Framework Coreのインストール

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

f:id:GrapeCity_dev:20180605170906p:plain:w600

モデルの作成

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

EFCoreClassLibrary.csprojを編集して<TargetFramework>netstandard2.0</TargetFramework><TargetFrameworks>netcoreapp2.0;netstandard2.0</TargetFrameworks>に置き換えます。

f:id:GrapeCity_dev:20180605172022p:plain:w600

[パッケージ マネージャー コンソール]で次のコマンドを実行して、既存のデータベースからモデルを作成します。Azure SQL Databaseの接続文字列を設定します。

Scaffold-DbContext "コピーした接続文字列をペーストしてください" Microsoft.EntityFrameworkCore.SqlServer

成功するとモデルとコンテキストgrapecitytestdbContext.csが作成されます。

f:id:GrapeCity_dev:20180605172757p:plain:w300

成功したら、EFCoreClassLibrary.csprojファイルを編集して<TargetFrameworks>netcoreapp2.0;netstandard2.0</TargetFrameworks><TargetFramework>netstandard2.0</TargetFramework>に置き換えます。元に戻しておかない場合、UWPアプリからこのライブラリが参照できないので注意してください。

デスクトップアプリの作成

デスクトップアプリ(Windows Forms、WPF、UWP)を以下の構成で作成します。EFCoreClassLibraryを各プラットフォームで利用できるようにソリューションC1DesktopFlexGridにWindows Forms、WPF、UWPのプロジェクトを追加します。

f:id:GrapeCity_dev:20180607095625p:plain:w300

各プラットフォームでの作業はこちらです。

アプリケーション(Windows Forms)の作成
アプリケーション(WPF)の作成
アプリケーション(UWP)の作成

アプリケーション(Windows Forms)の作成
C1DesktopFlexGridソリューションにWindows FormsのプロジェクトC1WinFlexGridを追加します。プロジェクトの参照にEFCoreClassLibraryプロジェクト、NugetパッケージMicrosoft.EntityFrameworkCore.SqlServerを追加します。

f:id:GrapeCity_dev:20180605175807p:plain:w300

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

f:id:GrapeCity_dev:20180605174751p:plain:w600

コードビハインドで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を追加します。

f:id:GrapeCity_dev:20180606095907p:plain:w300

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

f:id:GrapeCity_dev:20180606115410p:plain:w600

コードビハインドで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を追加します。

f:id:GrapeCity_dev:20180606120259p:plain:w300

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

f:id:GrapeCity_dev:20180606132022p:plain:w600

以下を参考にライセンスを設定します。

コードビハインドで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>を追加しておきます。

f:id:GrapeCity_dev:20180606131615p:plain:w600

確認してみる

Visual Studioからそれぞれデバッグ実行してみます。

Windows Forms

f:id:GrapeCity_dev:20180606132346p:plain:w600

WPF

f:id:GrapeCity_dev:20180606132357p:plain:w600

UWP

f:id:GrapeCity_dev:20180606132430p:plain:w600

各プラットフォームの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開発支援コンポーネントの最新動向についてのセッションも行います。ぜひご参加ください。

\  この記事をシェアする  /