857

.NET v3.5 SP1が(VS2008 SP1と共に)リリースされたので、.NETエンティティフレームワークにアクセスできるようになりました。

私の質問はこれです。EntityFrameworkとLINQtoSQLをORMとして使用するかどうかを決定しようとする場合、違いは何ですか?

私の理解では、Entity Framework(LINQ to Entitiesで使用する場合)は、LINQ to SQLの「兄貴」ですか?これが事実である場合-それはどのような利点がありますか?LINQ to SQLだけではできないことは何ができるでしょうか?

4

17 に答える 17

496

LINQ to SQL は、Microsoft SQL Server で使用可能なデータベース テーブル、ビュー、sproc、および関数の 1 対 1 のマッピングのみをサポートします。これは、比較的適切に設計された SQL Server データベースへの迅速なデータ アクセス構築に使用する優れた API です。LINQ2SQL は、C# 3.0 および .Net Framework 3.5 で最初にリリースされました。

LINQ to Entities (ADO.Net Entity Framework) は、ORM (Object Relational Mapper) API であり、オブジェクト ドメイン モデルの幅広い定義と、それらのさまざまな ADO.Net データ プロバイダーとの関係を可能にします。そのため、多数の異なるデータベース ベンダー、アプリケーション サーバー、またはプロトコルを組み合わせて、さまざまなテーブル、ソース、サービスなどから構築されたオブジェクトの集合マッシュアップを設計できます。ADO.Net Framework は、 .Net Framework 3.5 SP1。

これは MSDN の優れた入門記事です: LINQ とリレーショナル データの紹介

于 2008-09-21T03:22:59.403 に答える
209

迅速で汚い答えはそれだと思います

  • LINQ to SQLは、それをすばやく簡単に行う方法です。これは、あなたがより速く進み、あなたがより小さな何かに取り組んでいる場合、より速く配達することを意味します。
  • Entity Frameworkは、それを行うための全面的な、制限のない方法です。これは、より大きなものに取り組んでいる場合、事前に時間がかかり、開発が遅くなり、柔軟性が高くなることを意味します。
于 2008-08-12T16:00:26.243 に答える
111

LINQ to SQL は本当に死んでいますか? InfoQ.comのジョナサン・アレン著

Matt Warren は [LINQ to SQL] を「存在するはずがなかった」ものと表現しています。本質的には、実際の ORM の準備が整うまで、LINQ の開発を支援するための代役になるはずでした。

...

Entity Framework の規模が原因で、.NET 3.5/Visual Studio 2008 の期限に間に合いませんでした。これは、サービス パックというよりもメジャー リリースのような残念な名前の ".NET 3.5 Service Pack 1" に間に合うように完成しました。

...

開発者は [ADO.NET Entity Framework] を好まないのは、その複雑さのためです。

...

.NET 4.0 の時点で、LINQ to Entities は、LINQ to リレーショナル シナリオで推奨されるデータ アクセス ソリューションになります。

于 2008-11-03T15:53:25.260 に答える
99

@larsが投稿した記事には明らかな違いがいくつかありますが、簡単な答えは次のとおりです。

  • L2Sは緊密に結合されています-データベースの特定のフィールドへのオブジェクトプロパティ、より正確には特定のデータベーススキーマへのオブジェクトマッピング
  • L2SはSQLServerでのみ動作します(私が知る限り)
  • EFを使用すると、単一のクラスを複数のテーブルにマッピングできます
  • EFはMM関係を処理します
  • EFには、任意のADO.NETデータプロバイダーをターゲットにする機能があります

当初の前提は、L2Sは迅速な開発用であり、EFはより「エンタープライズ」なn層アプリケーション用でしたが、それはL2Sを少し売りにしています。

于 2008-08-12T11:15:24.803 に答える
82

LINQ to SQL

  1. 同種データソース: SQL Server
  2. データ構造が適切に設計されている小規模なプロジェクトにのみ推奨
  3. SqlMetal.exeで再コンパイルせずにマッピングを変更可能
  4. .dbml (データベース マークアップ言語)
  5. テーブルとクラス間の 1 対 1 のマッピング
  6. TPH継承をサポート
  7. 複合型をサポートしていません
  8. ストレージファーストのアプローチ
  9. データベースのデータベース中心のビュー
  10. C# チームによって作成されました
  11. サポートされていますが、それ以上の改善は意図されていません

エンティティ フレームワーク

  1. 異種データソース:多くのデータ プロバイダーをサポート
  2. 以下を除くすべての新規プロジェクトに推奨:
    • 小さなもの (LINQ to SQL)
    • データ ソースがフラット ファイルの場合 (ADO.NET)
  3. モデルおよびマッピング ファイルを設定するときに再コンパイルせずにマッピングを変更できます メタデータ アーティファクト プロセスを出力ディレクトリにコピーします
  4. 以下を含む .edmx (Entity Data Model):
    • SSDL (ストレージ スキーマ定義言語)
    • CSDL (概念スキーマ定義言語)
    • MSL (マッピング仕様言語)
  5. テーブルとクラス間の 1 対 1、1 対多、多対 1 のマッピング
  6. 継承をサポート:
    • TPH (階層ごとのテーブル)
    • TPT (タイプごとのテーブル)
    • TPC (具体的なクラスごとのテーブル)
  7. 複合型をサポート
  8. コード ファースト、モデル ファースト、ストレージ ファーストのアプローチ
  9. データベースのアプリケーション中心のビュー
  10. SQL Server チームによって作成されました
  11. Microsoft Data API の将来

以下も参照してください。

于 2015-04-21T08:26:32.470 に答える
53

Entity Framework に関する私の経験は、素晴らしいものではありませんでした。まず、EF 基本クラスから継承する必要があるため、POCO に別れを告げます。あなたのデザインはEFの周りにある必要があります. LinqtoSQL を使用すると、既存のビジネス オブジェクトを使用できます。さらに、遅延読み込みはありません。自分で実装する必要があります。POCO と遅延読み込みを使用するためのいくつかの回避策がありますが、EF はまだ準備ができていないため、IMHO に存在します。4.0以降に戻す予定です

于 2008-12-08T03:50:54.467 に答える
47

簡単な言葉で何をいつ使用するかを説明する非常に良い答えをここで見つけました:

どのフレームワークを使用するかの基本的な経験則は、プレゼンテーション層でデータを編集する方法を計画することです。

  • Linq-To-Sql - プレゼンテーション レイヤーでデータの 1 対 1 の関係を編集する予定がある場合は、このフレームワークを使用します。つまり、1 つのビューまたはページで複数のテーブルのデータを組み合わせる予定はありません。

  • Entity Framework - ビューまたはページで複数のテーブルのデータを結合する予定がある場合は、このフレームワークを使用します。これを明確にするために、上記の用語は、表示されるだけでなく、ビューまたはページで操作されるデータに固有のものです。これを理解することが重要です。

Entity Framework を使用すると、テーブル化されたデータをまとめて "マージ" して、編集可能なフォームでプレゼンテーション層に提示できます。その後、そのフォームが送信されると、EF はさまざまなテーブルからすべてのデータを更新する方法を認識します。

L2S よりも EF を選択するより正確な理由はおそらくありますが、おそらくこれが最も理解しやすいでしょう。L2S には、ビュー プレゼンテーション用にデータをマージする機能がありません。

于 2012-03-23T15:52:54.357 に答える
37

私の印象では、Linq2Sql がニーズに合わない場合、データベースは非常に巨大であるか、設計が非常に悪いということです。私は、Linq2Sql を使用する大小の Web サイトを約 10 ほど持っています。私はエンティティ フレームワークを何度も見てきましたが、Linq2Sql でそれを使用する正当な理由が見つかりません。つまり、データベースをモデルとして使用しようとしているので、モデルとデータベースの間にはすでに 1 対 1 のマッピングがあります。

私の現在の仕事では、200 以上のテーブルを持つデータベースがあります。悪いソリューションがたくさんある古いデータベースなので、Linq2Sql よりも Entity Framework の利点を見ることができましたが、データベースはアプリケーションのエンジンであり、データベースの設計が不適切で遅い場合はアプリケーションを再設計することをお勧めします。も遅くなります。そのようなデータベースで Entity フレームワークを使用することは、悪いモデルを隠すための応急処置のように思えますが、そのようなデータベースから得られる悪いパフォーマンスを隠すことはできません。

于 2008-11-21T19:52:18.230 に答える
26

ここで良い比較を見つけることができます:

ここに画像の説明を入力

http://www.dotnet-tricks.com/Tutorial/entityframework/1M5W300314-Difference-between-LINQ-to-SQL-and-Entity-Framework.html

http://www.c-sharpcorner.com/blogs/entity-framework-vs-linq-to-sql1

于 2015-08-31T20:07:51.340 に答える
24

ここでの回答は、Linq2Sql と EF の違いの多くをカバーしていますが、あまり注目されていない重要な点があります。Linq2Sql は SQL Server のみをサポートしているのに対し、EF は次の RDBMS のプロバイダーを持っています。

マイクロソフト提供:

  • SQL Server、OBDC、および OLE DB 用の ADO.NET ドライバー

サード パーティ プロバイダー経由:

  • MySQL
  • オラクル
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • サイベース
  • シナジェックス
  • 火の鳥
  • Npgsql

いくつか挙げると。

これにより、EF はリレーショナル データ ストアに対する強力なプログラミングの抽象化になります。つまり、開発者は、基になるデータ ストアに関係なく、一貫したプログラミング モデルを使用できます。これは、幅広い一般的な RDBMS と相互運用できることを確認したい製品を開発している場合に非常に役立ちます。

この抽象化が役立つもう 1 つの状況は、多数のさまざまな顧客や組織内のさまざまなビジネス ユニットと連携する開発チームの一員であり、RDBMS の数を減らすことで開発者の生産性を向上させたい場合です。さまざまな RDBMS の上でさまざまなアプリケーションをサポートするために熟知しています。

于 2014-03-17T03:19:58.573 に答える
16

EF を使用すると、同じデータベース モデル内で複数のデータベースを使用できないことがわかりました。しかし、linq2sql では、スキーマ名の前にデータベース名を付けるだけで済みました。

これが、私が最初に linq2sql を使い始めた理由の 1 つです。EF がまだこの機能を許可しているかどうかはわかりませんが、これを許可しないように意図されていたことを読んだことを覚えています。

于 2011-02-17T15:36:00.257 に答える
13

データベースが簡単で単純な場合は、LINQ to SQL で十分です。テーブルの上に論理的/抽象化されたエンティティが必要な場合は、Entity Framework を使用してください。

于 2008-09-17T07:22:11.883 に答える
9

どちらも、一意のSQL2008データ型をまだサポートしていません。私の観点からの違いは、エンティティは将来のリリースで地理データ型を中心にモデルを構築する機会がまだあり、Linq to SQLは放棄され、決してそうしないということです。

nHibernate、またはOpenAccessはどうなっているのだろうか...

于 2009-04-19T05:48:50.900 に答える
7

途中に奇妙なものがなく、迅速に何かを開発する必要があり、テーブルを表すエンティティを持つ機能が必要な場合は、次のように思います。

Linq2Sqlは優れた味方になる可能性があり、LinQと一緒に使用すると、優れた開発タイミングが解き放たれます。

于 2009-03-14T16:53:31.197 に答える