2011-02-01 66 views
2

我聽說Linq查詢寫入一次也可以在SQL和MS Access數據庫上運行。是對還是錯?Linq與多個RDBMS類型

例如,我想寫一次查詢,不管數據庫類型如目前我使用MS Access數據庫,然後如果我想移動到SQL Server然後我不想改變我的查詢。這可能嗎??

+0

我在SQL Server和SQL CE上使用相同的程序集時沒有問題。也就是說,我不得不稍微調整生成的代碼,並限制在SQL CE中可用的內容(例如沒有視圖,沒有存儲過程,沒有函數等)。 – leppie 2011-02-01 06:33:38

回答

2

它部分取決於查詢。對於簡單的查詢(select,where,orderby)你應該沒問題,但是有很多特定於實現的細節。

例如:

  • 一組服用First你還沒有明確地下令:LINQ到SQL是好的與,LINQ到實體將無法
  • 使用Expression.Invoke到建立一個粗糙的自定義表達式:再一次,LINQ到SQL是好的,LINQ到實體將會失敗
  • 使用類似UDF的東西 - 除了LINQ-to-Entities不支持它,你的RDBMS可能不支持它
  • 與「Astoria」(LINQ to data services),有各地.Where(predicate).FirstOrDefault() VS .FirstOrDefault(predicate)某些情況下 - 這是語義上相同,但IIRC只有一個作品(道夫)

我的觀點是;它可能工作,但你確實需要針對具體實施進行測試。

0

LINQ-to-SQL只能用於SQL服務器。對象的Linq將在大多數任何集合上工作,但是你失去了延期執行。

0

如果您使用實體框架,您可以爲不同的數據源找到/購買多個提供商。

只要您對實體上下文有足夠的抽象,就可以使用任何LINQ構造來構建查詢。但請記住,並非所有提供商都支持相同的運營商和功能。在DBMS更改期間,您仍然需要測試完整的應用程序。

0

基本上,您可以使用Linq到對象並使用任何數據集。

如果你想保存你的邏輯和具體 - 我建議你使用Devart LinqConnect

另外,您還可以閱讀given article中有關同時使用Oracle和MS SQL的更多信息。 LinqConnect的方法將是相同的。