2011-02-01 8 views
2

私は、Linqクエリの書き込みがSQLとMS Accessデータベースでも実行できると聞いています。それは間違っていますか?複数のRDBMSタイプを持つLinq

たとえば、現在私はMS Accessデータベースを使用していますが、その後SQL Serverに移行する場合はクエリを変更したくない場合など、データベースの種類に関係なく一度クエリを書きます。これは可能ですか?

+0

SQL ServerとSQL CEの両方で、同じアセンブリを問題なく使用しています。つまり、生成されたコードを多少調整しなければならず、SQL CEで利用できるもの(ビューがない、ストアドプロシージャーがない、関数がないなど)に制限する必要がありました。 – leppie

答えて

2

クエリによっては部分的に異なります。 簡略のクエリ(select、where、orderby)には問題ありませんが、実装固有の詳細がたくさんあります。

たとえば:あなたは明示的には、注文していないセットにFirstを取っ

  • :LINQツーSQLはそれで結構です、LINQツーエンティティがExpression.Invokeにを使用して
  • を失敗しますLINQ-to-Entitiesは失敗します。
  • UDFのようなものを使用しています - それをサポートしていないLINQ-to-Entitiesに加えて、RDBMSがサポートしていない可能性があります。
  • "Astoria"(LINQ to data services)のある
  • .FirstOrDefault(predicate).Where(predicate).FirstOrDefault()周りにいくつかのシナリオ - 意味的に同じですが、IIRC(アストリア)唯一の作品

私のポイントがあります。それはかもしれませんが動作しますが、特定の実装に対してテストする必要があります。

0

LINQ-to-SQLはSQLサーバーでのみ動作します。オブジェクトへのLinqはほとんどのコレクションで動作しますが、遅延実行は失われます。

0

Entity Frameworkを使用している場合、さまざまなデータソースのプロバイダをいくつか検索して購入できます。

エンティティコンテキストで十分な抽象化が得られるとすぐに、任意のLINQ構造を使用してクエリを構築できます。ただし、すべてのプロバイダーが同じ演算子と関数をサポートするわけではありません。 DBMSの変更中も、完全なアプリケーションをテストする必要があります。

0

基本的には、Linq to Objectsを使用して任意のデータセットで作業できます。

ロジックを保存したい場合は、具体的に - Devart LinqConnectを使用することをおすすめします。

また、given articleでOracleとMS SQLの同時使用の詳細を読むことができます。 LinqConnectのアプローチも同じです。

関連する問題