9

私はLinqの世界に不慣れで、現在それを探索しています。データベースとのやり取りを伴う次のプロジェクトで使用することを考えています。

私が読んだものから、データベースとやり取りするには2つの異なる方法があると思います:

  • Linq から SQL へ
  • Linq から DataSet

現在、私が取り組んでいる製品は、データベースのタイプに依存できません。たとえば、SQL サーバー/Oracle で展開される場合があります。

今私の質問は次のとおりです。

  1. Linq to SQL を使用している場合、SQL サーバーだけに固執していますか?
  2. SQLサーバーとオラクルの両方にLinq to DataSetを使用できると思います。しかし、Linq to DataSet for SQL server を使用すると (Linq to SQL offcourse と比較して) 何か (プログラミングの容易さ、パフォーマンス、信頼性など) が失われますか?
4

6 に答える 6

11

あなたは#1について正しいです-LinqtoSqlはSQLServerデータベースに対してのみ機能します。

さまざまなデータソースに(さまざまなプロバイダーを使用して)アクセスできるようにする場合は、ADOEntityFrameworkを使用します。POCOのようなエンティティを使用するという点でも同様の柔軟性が得られ、より高度で複雑な実装に拡張するのは非常に簡単です。

私の現在のプロジェクトでは、Linq to Sqlを使用しており、問題はありませんが、克服すべき問題がいくつかあります。拡張性の観点から、単純すぎる場合があります。Linq toSqlとEntityFrameworkに関する(より良い)応答をここに書きました。

質問2に関して-DataSetsに戻りたいかどうかわかりません。私見では、それらは過去のものですが、特定のコントロール(インフラジスティックスなど)を備えたまともなツールキットがある場合に役立ちます。ただし、高速トランザクションシステムにはオーバーヘッドが高すぎると思います。実装には、LinqtoSqlまたはEntityFrameworkの半分の機能がありません。

于 2009-03-06T12:48:53.633 に答える
4

最初の質問に答えるには:いいえ、オラクル用のlinqプロバイダーの他の実装があります。例:

LinqToOracle

DbLinq

後者はSqLiteのようなより多くのデータベースをサポートします。

また、ADO.NETEntityFrameworkもチェックアウトしてください。

于 2009-03-06T12:51:08.403 に答える
3
  1. はい、SQLServerのみです。さらに、MicrosoftはL2Sを凍結しており、これ以上改良する予定はありません。しかし、それは優れたフレームワークであり、非常に優れたパフォーマンスを発揮し、使いやすいものです。
  2. Linq to DataSetは、データがDBからフェッチされた後、列挙可能なものとしてデータセットにアクセスします。Linq to SQLは、IQueriableを使用して動的SQLクエリを実際に構築します。多くの場合、L2Sのパフォーマンスは大幅に向上し、DBコードを作成する手間が省けます。

LinqtoEntitiesを調べる必要があります。これは、利用可能な最も本格的なフレームワークです。現在は主にSQLServer向けですが、やがてOracleなどもサポートされる予定です。

于 2009-03-06T12:48:58.110 に答える
2
  1. SQLサーバーだけにとらわれているわけではありません。理論的には、任意のデータベース用のlinqプロバイダーを構築できます。LinqtoOracleのcodeplexに関するプロジェクトがありますhttp://www.codeplex.com/LinqToOracle。自分で試したことはありません。

  2. データをデータセットにどのように取り込みますか?テーブル全体をデータセットにフェッチするつもりはないと思いますか?それは深刻なパフォーマンスの問題になります。データセットにLinqを使用する場合は、linqにSQLクエリを作成させるのではなく、データベースからデータを取得するためにすべてのSQLクエリを自分で作成する必要があります。したがって、実際には、最初にデータベースにクエリを実行してから、データセットにクエリを実行する必要があります。私には二重の仕事のようです...

于 2009-03-06T12:49:42.167 に答える
1

Linq to SQLを使用する場合、私が知る限り、SQLServerにかなり悩まされるでしょう。

Linq to DataSetを使用すると、プログラミングが少し簡単になります。Linqを使用すると、Linqエンティティを直接使用できますが、DataSetsを使用する場合は、DataSet名(MyDataSet.Entity = new MyDataSet.Entity( ))、しばらくすると古くなります。それが唯一の犠牲だと思います。

ただし、たとえばOracleで使用できます(プロジェクトで使用しました)。また、DataAdapterをもう少し制御できるドラッグアンドドロップでもあります(私が知る限り、Linq-to-SQLをそれほど微調整する必要はありませんでした)。たとえば、使用するクエリを指定できます。 、など。

DataSetでテーブル間の関係を定義できるため、Linqを十分に使用できるため、実際に問題が発生することはありません。

Linq-to-DataSetの信頼性はLinq-to-SQLの場合と同じくらい良いと思います(問題はありませんでした)。パフォーマンスは十分に良いように見えましたが、実際にプロファイリングすることはできませんでした。

于 2009-03-06T12:50:55.923 に答える
1

SQL Server だけに固執しているわけではありません。Oracle、MySQL、PostgreSQL、および SQLite サーバー用の LINQ to SQL 実装を提供しています。詳細については、こちらをご覧ください DataSet は、LINQ to SQL テクノロジと比較するとあまり便利ではありません。代替手段として Entity Framework オプションを確認してください。1 つの概念モデルで複数のストレージ モデルを作成し、SQL Server と Oracle データベースを並行して使用できます。

于 2009-10-13T12:48:49.807 に答える