BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース .NET Core のための ORM

.NET Core のための ORM

原文(投稿日:2017/12/04)へのリンク

あなたのリクエストに応じて、ノイズを減らす機能を開発しました。大切な情報を見逃さないよう、お気に入りのトピックを選択して、メールとウェブで通知をもらいましょう。

EF Core がビューやストアドプロシージャのような基本的なデータベースの機能を手に入れようと奮闘する中、開発者たちは自身のデータアクセスのニーズのために他のものを探している。ここではその選択肢の中からポピュラーなものをいくつか紹介する。

LLBLGen Pro Runtime Framework

LLBLGen Pro Runtime Framework は、LLBLGen エンティティモデリングツールとともに使用されるオプショナルな ORM である。LLBLGen は Entity Framework などの他の ORM でも動作するためオプショナルという言葉を用いた。

Entity Framework のように、LLBLGen Pro Runtime Framework は完全な OOP スタイルの ORM である。しかしいくつかの点で違いがあり、第1はパフォーマンスを重要視している点だ。EF Core は従来の Entity Framework よりも非常に高速だが、いずれも他の ORM よりもやはり遅いと考えられる。LLBLGen Pro の作者であるFrans Bouma 氏は、様々な .NET のデータアクセス / ORM の実装のマテリアライゼーション速度を比較したパフォーマンス競争をホストしている。

LLBLGen Pro Runtime Framework は EF や EF Core と比較してコンテキストバウンドでないという点でも異なっている。いずれのエンティティも自身の変更をトラックし、コンテキストをオープンしたままにすることなく、オブジェクトのグラフをメモリ上で操作することができる。(これにより DBA は喜ぶだろう。なぜなら、コンテキストをオープンにしたままにしないということはコネクションをオープンにしたままにしないということであり、データベース接続のプーリングが防がれるからだ。)

.NET Core のための多くの ORM と同様に、 Core のバージョンに対して LLBLGen Pro Runtime Framework の制限がある。しかしその多くは TransactionScope が SqlClient でサポートされていない、あるいはバイナリでシリアライズ可能なオブジェクトが少ないといった .NET Core 自身の機能不足による制限である。

Dapper

スケールの反対側はよく知られたマイクロ OM の Dapper である。最も高速な ORM であると言われることも多く、 Dapper は一貫して .NET ORM ベンチマークの頂点かその付近に位置している。

Dapper は生の SQL の呼出しと結果のマテリアライズにほぼ限定されているため、 .NET と .NET Core とでは本質的に同様に機能する。完全な ORM とは異なり、 Dapper は SQL 生成機能を提供しない。そのため他の ORM よりも冗長になる傾向がある。多くの開発者が ORM が生成する SQL を信頼していないわけではあるが。

LINQ to DB

LINQ to DB は自身を「Dapper や Massive、 PetaPoco などのマイクロ ORM より一歩上」であると表現する。変更のトラッキングなどのために Entify Framework のパフォーマンス上の課題となる特徴の多くが排除されている。

LINQ to DB での Join はいくぶん普通と異なる。 EF では、いわゆる “join” が実際は子オブジェクトやコレクションとして扱われる。生成される SQL はもちろん join を使用しないが、結果のセットがオブジェクトとしてマテリアライズされたときに現れる。

LINQ to DB では実際に join が得られる。より明確には “left joins” と “inner joins” である。この文法は EF の LINQ の実装に慣れている人にとっては少し奇妙だが、データベースの実際の挙動にはより則している。

DevExpress XPO

eXpressPersistent Objects (XPO) は、もう1つの商用製品である。 Reddit ユーザーの -GrapH- 氏は以下のように説明した。

私は DevExpress XPO を 11 年間使用してきており、この 10月11日 に .NET Standard 2.0 がサポートされました。これは商用製品であるにもかかわらず、 .NET Core をサポート (v17.2.2) した最初の .NET ベータが誰でもフリーで使用できるようになります。追加アップデートは有料ですが、ビジュアルデザイナーやテクニカルサポートも含まれます。この ORM は EF とは異なっており、またより古く(私の誤りでなければ、最初のバージョンは .NET 1.1 でリリースされました)、様々なスケールのアプリケーションに必要な全ての基本的な機能を有しています。https://github.com/DevExpress/XpoNetCoreDemos でチュートリアルをチェックしてください。

どれがあなたのお気に入り?

.NET Core の ORM はさらに多くのものが利用できる。もしあなたが数ヶ月使用しているものがあれば、それについてどう思っているか知らせてほしい。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT