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