2009-10-06 62 views
1

有幾個「應該我選擇了這樣或那樣的」關於SO和谷歌的問題,還有很多比較LINQ2SQL和LINQ2E。我見過的缺點,差異,缺點,優點,侷限性等從舊數據層來的LINQ to SQL /實體框架

我不能說我是專家,但我想知道「你會做什麼」,如果你遇到這種情況和原因。

我要的東西添加到「老」 2.0應用程序,最近已遷移到3.5(它種編出來的方塊,在這裏和那裏的一些警告)。由於我不得不添加新的東西,我想開始使用LINQ(2SQL或實體)。

我以前和Linq2SQL一起工作過,我喜歡它是一個快速,易於使用的解決方案...... 如果你不想做太奇怪的事情。如果你來自舊的「記錄集」,表格之間的自然1..1關係是天賜之物。同樣不錯的是,根據您想要使用的表格集合,可以擁有不同的數據上下文。

隨着事物和新功能的數量增長,我已經開始考慮嘗試實體框架,而不是LINQ2SQL的可能性。我不喜歡後者是無法處理Many2Many關係,而不訴諸於hack

這就是實體框架的用武之地。,你不能有多個「小模特」像你LINQ2SQL和「datacontexts」這樣做,除非你犧牲some的東西,有些東西other

數據庫有218臺,現在,它並沒有顯着增長。不時有新桌子,但我們並不是每天談論10桌。我想說,在接下來的一年裏,我們將有一個「困難時期」達到250張桌子。

許多2個多關係,有些與PK /只PK和一些與骨料(其中實體框架不magically handle,但它可以對付他們。這就是爲什麼我不希望的原因從LINQ2SQL開始,除非hack是「OK」並且是可接受的方法。

你會做什麼?妥協N..N關係(即使存在黑客攻擊,它也不會像優雅, 「作爲一個集成的解決方案),並與Linq2SQL和」有很多小的數據環境,你創建和銷燬「哲學,或者,另一方面,與實體框架繼續,有一個巨大的數據模型與所有表或關係,並從那裏開始? 即使創建多個模型存在缺點(請參閱此處的鏈接),並讓一個巨型模型具有缺點。

也有關於微軟「放棄」Linq2SQL的非官方評論(我懷疑,但你永遠不知道)。我們的數據庫是MSSQL,我不會很快看到變化。

在這個問題上的任何經驗將不勝感激。

+0

你是否已經習慣了使用LinqToSql/EntityFramework附帶的O/R設計器的概念?看起來你堅持有這種支持,但你有200多張桌子。在這個規模上,像SQLMetal/EdmGen可能會提供更好的整體體驗。 [轉換一個LinqToSql DAL到的EntityFramework]的 – 2009-10-06 13:02:29

+0

可能重複(http://stackoverflow.com/questions/787807/converting-a-linqtosql-dal-to-entityframework) – 2013-09-20 20:42:41

回答

1

我正在處理Linq2SQL中的多對多關係。

看到here爲neato擴展方法來解決你的痛苦!

就個人而言,我覺得用一個整體模式是最容易處理的。

+0

雖然我喜歡的溶液(多達一個我鏈接),它仍然有點複雜,需要dbml手動編輯(添加屬性),並打破設計器。 「一個單一模型」是指實體模型還是一個Linq2sql數據上下文? – 2009-10-06 10:39:56

+0

我沒有使用EF,所以我的意思是Linq2SQL。 Linq2SQL的定製生成工具很少,這使得修改變得更容易。我使用http://www.codeplex.com/l2st4的重大修改版本來修復所有內容,只需將所有表格拖動到設計器表面即可。 – leppie 2009-10-06 11:02:44

+1

我有一個在單個Linq-to-SQL模型中有400多個實體的模型。工作得很好。如果您在.net 3.5下執行此操作,請使用L2S。當4.0出來並且穩定時,可能需要重新評估EF,但EFv1對於比NorthwindEF db更復雜的任何東西都有太多showstoppers ...... JMHO – KristoferA 2009-10-06 11:18:12

0

我會在你的情況下做什麼?我會使用NHibernate和Castle Active Record。

爲什麼?因爲該解決方案爲「真實世界」場景提供了最好的支持,尤其是您提到的場景。 NHibernate與你的項目進行比例縮放,並不限制你。它基本上是免費的。 NHibernate是一個非常成熟,經過充分測試的解決方案。

你不提NHibernate的,你正在尋找到的東西,所以我不知道什麼並不在這方面吸引你(好像你已經閱讀不夠,你會遇到那個選項)。

LinqToSql /的EntityFramework不提供一大堆,你也無法與NHibernate得到。

+1

我之所以沒有考慮過NHibernate,是因爲我們已經使用了作者已經放棄的舊ORM(溫柔)。我們不想跳進另一個可能會在未來消失的項目(不管它多麼成熟),再加上我剛開始時很難掌握的事實(據我所見/讀/聽)。此外,Linq提供了一個很好的語法。 ;) 當我們選擇溫柔的NHibernate時,那是因爲Gentle是「更好,更快和未切割」。我想這是在2005年的一個錯誤的決定:S – 2009-10-08 11:01:53

+0

這就是說,我不放棄NHibernate,因爲它現在看起來非常成熟,但我恐怕它可能會導致一步學習曲線... ... – 2009-10-08 13:00:06

+0

NHibernate支持Linq 。在我看來,NHibernate與其他ORM具有相似的學習曲線。有些ORM看起來似乎比實際更簡單。 :)大多數「簡單」的ORM就是這樣,因爲它們缺乏特性和處理許多真實世界場景的能力。如果您必須選擇其中一種Microsoft ORM解決方案並且您對未來感到擔憂,那麼EntityFramework將擁有更加光明的未來。 – 2009-10-08 14:01:43