2011-01-25 32 views
6

爲了讓項目的原型儘快啓動並運行,我使用LINQ to SQL來實現數據持久性。.NET:從LINQ轉換到SQL到實體框架

現在項目更成熟了,我遇到了LINQ to SQL的併發限制。既然它不是一個真正的ORM,也不是企業使用的意思,我想用Entity Framework持久性替換所有的LINQ to SQL工作。

這有什麼關係?我的任何LINQ to SQL工作都可以爲EF重新編譯嗎?我將不得不重新從頭開始EF?我從哪說起呢?任何有用的鏈接或建議?

+3

「既然它不是一個真正的ORM,也不是企業使用的意思」 - Stackoverflow是使用L2S構建的 - 我想說這是企業準備就緒! – 2011-01-25 20:00:27

+1

就像@geoff說的那樣,SO是建立在L2S之上的,所以它絕對可以在企業中使用。您可能會感興趣的是您遇到的併發限制;這裏可能有一個觀點,可以幫助你解決這些問題,而不必轉移到另一個ORM批發。 – casperOne 2011-01-25 20:03:10

回答

1

這是一個相當困難的問題,我一直在推薦人們避免使用LinqToSql很長一段時間的主要原因之一。微軟不希望人們使用LinqToSql。

最好的辦法是重新開始並重新使用代碼(如果可以的話)(一些Linq查詢可能自動翻譯幾乎一個一個,但即使這樣也不是確定的)。

LinqToSql是一個真正的,但功能差,ORM。 LinqToSql可以被那些不需要高級ORM特性的人員在企業中使用。

你不可能是唯一一個會走這條路的人(試圖從LinqToSql升級到EntityFramework),但目前還不清楚如果市場需要好的工具來支持這種類型的的遷移。由於微軟的數據訪問方式每隔兩年左右就會改變十多年,所以您可能會考慮使用NHibernate作爲實體框架的替代方案(如果您擔心微軟「落伍」實體框架就像他們一樣到LinqToSql)。

0

我懷疑某種自動轉換是可能的。幾乎沒有區別。最糟糕的是用標量返回值調用存儲過程。 EntityFramework不會返回值,但會返回受影響的行數。這需要您的T-SQL進行更改。這不能由任何模板完成。有些LINQ2SQL查詢在EntityFramework中不起作用,需要修改。多元化存在令人討厭的差異。 EF儘量做到如此聰明。表UserInfo被複數化爲UserInfoes而L2SQL UserInfos。表人員被複數化爲人員而不是人員。所以你也需要改變這些複數。如果您對連接使用某些高級工作(不要使用連接字符串),則可以對其進行升級。 DBConnection與EntityConnection不兼容。你也需要重寫你的應用程序的這一層。很多轉換模板的辛苦工作。