2011年9月27日 星期二

指定Linq to Entity 轉成 SQL語法的版本

系統開發時是利用 SQL 2005 Express,在開發環境一切正常,可是移植到伺服機,每執行到
.FirstOrDefault()
就出錯,利用 SQL Profiler 查看,原來轉出來的的語法為:
Select TOP (1) ....

TOP (1) 在 SQL 2005/2008 是可被接受的語法,可是在 SQL 2000 卻語法錯誤!!!!


原來在 .edmx 中的 SSDL 區段內有一處可以指定轉譯成 SQL 敘述的版本「ProviderManifestToken」,其值即對應到 SQL Server 的版本(2000/2005/2008)

<!-- SSDL content -->
 <edmx:StorageModels>
  <Schema Namespace="LoginUserModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2000" ...

2 則留言:

  1. 這樣做只能解決「一時之急」,萬一有個語法"一定"要 2005 以上,怎麼辦?

    如果都是使用 Express 版本,還是建議全部同步升級至最新版。原本在 2000 Express 的 SQL語法,都能正常在 2005/2008 Express 執行。

    回覆刪除
  2. 感謝建議!
    是的,有比較好的環境、工具,本就該考慮升級,只是舊有的包袱一時無法拋棄

    回覆刪除