ADO.NET ORM の Dapper で CData ADO.NET Provider の使い方
最近 Sansan の中の人のBlogで「今までEntityFrameworksとDapperを使っていたけれど、軽量なDapperを全面的に採用しました」というのを見かけました。
私自身が今まで Dapper を使ったことが無かったので、どんな感じなのかな? という点と、ADO.NET ベースなら、CData ADO.NET Providerも動くでしょ! と思ったので、検証してみた結果をまとめてみたいと思います。
Dapper とは?
C#用の軽量なORMです。C# のORMといえば、EntityFrameworkが有名かつMicrosoftが提供していることもあるのでスタンダードな印象ですが、
EntityFrameworkはSQLクエリのレイヤーをあまり意識せず(あまりね)、扱うことができるのが特徴だと思いますが、DapperではSQL自体は自身で記述して、そこから取得したデータをオブジェクトにマッピングしてくれるのが特徴です。
シンプルなDapperの使い方
一番シンプルなSELECTクエリで試してみたいと思います。チュートリアルはこちらを参照。
なお、今回は.NET Core 3.0・Visual Studio 2019で試しています。
とりあえず、nuget で Dapperを入手しましょう。
PM> Install-Package Dapper
対象となるデータベースおよびテーブルはお馴染みAdventureWorksのProductsテーブルです。
使い方は、一度でもDataAdapter を使ってSQL Serverにアクセスしたことがある人であれば、難しくないと思います。
SqlConectionを生成し、QueryメソッドでSQLを渡すだけです。その際に格納したいClassを指定すれば、そのまま項目がClassのプロパティにマッピングされていきます。手軽で素晴らしい。
こんな感じで取得できました。
CData ADO.NET で Dapperを使う方法
次に CData ADO.NET を経由してDapperを利用してみたいと思います。
CData ADO.NET Providerは各種クラウドサービスWeb API(kintoneやSalesforceやDynamics 365等)やNoSQL(MongoDBやRedis等)にADO.NETベースでのアクセスを可能にするDriverライブラリ製品です。
通常であれば、HTTP Requestでデータを取得したり、更新したりするWeb APIをSQLでアクセスできるようにするのが特徴です。
今回は最近リリースされたばかりの名刺管理サービス Sansan の ADO.NET Providerを使ってみたいと思います。
以下のURLからトライアルがダウンロードできるので取得し、インストールしておきます。
https://www.cdata.com/jp/drivers/sansan/ado/
インストール後、コンソールアプリケーションのプロジェクトを作成したら、以下のフォルダから .net standard 版のSansan ADO.NET Provider DLLを参照します。
C:\Program Files\CData\CData ADO.NET Provider for Sansan 2019J\lib\netstandard2.0
Sansan ADO.NETはその名の通り、DataReaderやDataAdapter、EntityFrameworkなどのADO.NET フレームワークでアクセスできます。
ADO.NETベースで構成された専用のConnectionクラス(SansanConnection)が提供されているので、それを介してDapperを利用します。
ほぼ、先程のコードと変わらないですね。SqlConnectionをSansanConnectionに切り替えて、専用の接続文字列を指定するだけです。(Sansan API Keyの取得方法はこちらを参照してください。)
なお、テーブルの定義は以下のリファレンスから参照できます。
これでデバッグをしてみると、Sansan Web API経由で取得したデータがDapperを通り、BizCardクラスに格納され、参照することができます。
ADO.NET・SQLを介して、APIアクセスというと不思議な感じがするかもですが、かなり手軽にWeb APIを扱うことができ、またDapperを使うことでオブジェクトマッピングが手軽になるので、ビジネスロジックに集中できる感じで良いです。