web-dev-qa-db-ja.com

ormとADO.netの違いは何ですか?

私は本を​​読んでおり、「データベースへのアクセスにADO.NETを使用して独自のデータアクセスレイヤーを作成する場合、データスキーマが存在するかどうかにほとんど影響を与えません。ただし、Oを使用している場合/ RM、使用するツールによって柔軟性が制限されます」。 ADO.NETと他のORMの主な違いは何ですか?

10
Mehdi Souregi

ADO.NETは、SQL ServerやXMLなどのデータソース、およびOLE DBおよびODBCを介して公開されるデータソースへの一貫したアクセスを提供します。データ共有コンシューマアプリケーションは、ADO.NETを使用してこれらに接続できますデータソースを取得し、それらに含まれるデータを取得、処理、更新します。

ADO.NETは、データアクセスからデータアクセスを、個別にまたは連携して使用できる個別のコンポーネントに分離します。 ADO.NETには、データベースへの接続、コマンドの実行、結果の取得のための.NET Frameworkデータプロバイダーが含まれています。これらの結果は、直接処理されるか、ADO.NET DataSetオブジェクトに配置されてアドホックな方法でユーザーに公開されるか、複数のソースからのデータと結合されるか、階層間で渡されます。 DataSetオブジェクトを.NET Frameworkデータプロバイダーとは別に使用して、アプリケーションのローカルデータまたはXMLをソースとするデータを管理することもできます。

ADO.NETは、DBに接続し、SQL接続、コマンド、パラメーターを使用してDBを変更できるようにするレイヤーです。 ADO.NET MSDN

コンピューターサイエンスのオブジェクトリレーショナルマッピング(ORM、O/RM、およびO/Rマッピングツール)は、オブジェクト指向プログラミング言語の互換性のない型システム間でデータを変換するためのプログラミング手法です。これにより、事実上、プログラミング言語内から使用できる「仮想オブジェクトデータベース」が作成されます。一部のプログラマーは独自のORMツールを構築することを選択しますが、オブジェクトリレーショナルマッピングを実行する無料パッケージと商用パッケージの両方が利用可能です。

Entity FrameworkNHibernateはORMです。これは、SQL接続、コマンド、パラメーターで操作しないことを意味します。ORMがそれを行い、データベース構造をOOP方法で追加できます。追加、読み取り、更新、削除が可能です。 C#のオブジェクトを使用してDBのレコード。オブジェクトをDBに正しくマップする必要があります。Entity FrameworkはADO.NETで構築され、内部でADO.NETを使用します。SQLステートメントはORMによって生成されます [〜#〜] orm [〜#〜]

一般に、ORMを使用しないDBへのアクセスは高速ですが、より多くのコード行を提供する必要があります。 DBをOOPのように操作し、より読みやすいコードを記述する場合は、ORMを選択する必要があります。選択する内容によって目的に応じて異なります。

Micro ORM(Dapper、BLToolkit)を使用すると、SQLクエリを記述し、パラメーターをオブジェクトプロパティにマップできます。一般に、Micro ORMはFull ORMよりもパフォーマンスが優れていますが、ADO.NETは依然として高速です。

また、StackOverflowにはいくつかの質問と回答があります: EF vs ADO.NET

8
Roman Doskoch
  • 途中で、開発者はDataSetsおよびDataReadersを使用することを嫌うことを学びました
  • 。NET platformは、リレーショナルデータベースシステムと対話できるようにする多くの名前空間を定義します。総称して、これらの名前空間は_ADO.NET._として知られています
  • [〜#〜] orm [〜#〜]は、オブジェクトをリレーショナル世界にマッピングする_Object-Relational Mapper_を表します。名前が示すように、builds a relation / maps objects (model) to database objects(tables).
  • _ADO.NET_はアプリケーションをデータベースに接続する従来の方法であり、開発者がデータベース操作を完全に制御できるのに対し、ORMは_ADO.NET_の上に構築され、_ADO.NET_を暗黙的に使用します。
  • 要するに、NHibernate、Entity FrameworkのようなORMを使用すると、オブジェクト(モデル)のマッピングが_ORM._によって内部的に処理されるという点で生活が簡単になります。
  • ORMを使用する場合、すべてのクエリはORM自体によって生成されるため、すべてが手に入るわけではありません。これらのクエリがoptimizedかどうかはわかりません。

アプリケーションのパフォーマンスが主な関心事であり、絶対に重要なシナリオ[〜#〜] or [〜#〜]単に将来アプリケーションが大きくなることがわかっているシナリオでは、お勧めです_ADO.NET_ではなく_Entity Framework_を使用すると、アプリケーションが重くなるためです。

  • これに対する解決策は、Dapper、BLToolkitのような_Micro ORM's_でした。これらは、開発者が望むものの本質を提供します-データベース操作を厳密に型指定されたクラスにマップする簡単な方法。
  • 一部のLINQサポートによりさらに改善されますが、これらのMicro-ORMの主な利点は_raw speed._です

知恵の言葉:

  1. Dapperはマッピングを行うだけですが、多くのコーディングが必要です。EFはマッピングだけでなく、その上でさらに多くのことを行います。そのため、EFは遅くなります。
  2. また、純粋な_ADO.NET_はDapperよりも高速であり、OLEDBは_ADO.NET_よりも高速であり、ODBCは_OLEDB._よりも高速です
  3. したがって、パフォーマンスを真剣に考えているなら、おそらくavoidany _ORM._
0
Tahir77667