LINQ將從SQL文件生成一組類。這些應該直接使用還是應該包裝在另一個類中,以便模型不依賴於實現?直接使用LINQ生成的類?
3
A
回答
2
你可以這樣做。通常我會將Linq包裝到SQL類中,但如果應用程序很小,則可以直接使用存儲庫方法。
如果應用程序較大,則可以添加業務層。
1
如果您確實需要從您的sql數據庫的模型中進行抽象,那麼Linq-To-Sql可能是錯誤的選擇。當然,你可以使它工作(但這不是它的目的)。
如果您需要這種抽象級別,您將需要轉向更「企業」的ORM,如Entity Framework。他們需要更多的配置,用於指定更復雜的映射,使您的對象模型和數據庫模型彼此不相似,另一方面,如果這是過度殺傷,那麼使用Ling to Sql。這很簡單,而且很簡單,只要你堅持使用簡化的映射方法即可。
1
我認爲它的罰款,直接在您的業務和表現層使用生成的模型類 - 不過,我肯定會封裝的一些描述(GetOne()
,Save()
,Search()
,Delete()
等)的存儲庫模式中這些實體的數據訪問。
這樣做的主要原因是在將查詢結果返回到調用層之前「斷開」查詢結果,以便客戶端在返回的結果上使用LINQ時不會無意中直接對數據庫執行查詢。例如,在IQueryable<T>
上調用ToList()
將返回可以使用純LINQ to Objects管理的序列的本地副本。
它還促進了更好的圖層分離和更少的耦合,因爲客戶端將通過存儲庫上的接口方法進行交互,而不是直接使用LINQ to SQL來進行數據訪問,所以如果您決定挑選LINQ to SQL來支持實體框架(不寒而慄),它更容易做重構。
我會做的一個例外是當LINQ to SQL對象需要跨越服務邊界,即作爲數據傳輸對象發送到WCF服務或從WCF服務發送。在這種情況下,我認爲有一個支持序列化的獨立輕量級對象模型是個好主意 - 不要直接通過線路將LINQ發送到SQL對象。
相關問題
- 1. 使用linq生成直接更新,無需選擇
- 2. 使用LINQ生成素數
- 3. youtube-dl如何生成直接鏈接?
- 4. Linq使用生成的POCO類在EF4中的實體
- 5. 自動生成的linq類是空的?
- 6. 在asp.net生成的表上使用linq
- 7. 直播Xcode的接口生成器UIView子類(IB_DESIGNABLE)無的drawRect:
- 8. 生成可直接在URL中使用的加密字符串
- 9. 直接生成powerset的特定子集?
- 10. 如何使用LINQ生成新類型的對象
- 11. ASP.NET MVC2 - 使用LINQ生成的類(驗證問題)
- 12. 結合使用UIHint與LINQ to SQL生成的類
- 13. ASP .NET MVC + LINQ生成的類+ DataAnnotations
- 14. 將LINQ擴展到SQL生成的類
- 15. 生成的C#LINQ to SQL類
- 16. 生成Linq DataContext
- 17. 爲什麼我的數據類成員不能直接使用?
- 18. 使用linq生成合並列表
- 19. 使用Linq從Northwind DB生成報告
- 20. 使用Linq生成新時序ID
- 21. 使用outerIt生成動態Linq查詢
- 22. 使用SQLMetal從SQL Compact 3.5數據庫生成Linq類
- 23. NHibernate Linq Startwith生成外部聯接
- 24. 使用Python生成直方圖
- 25. 直接從倉庫生成javadoc?
- 26. 直接HTML或PHP生成html
- 27. Jaxb直接生成XML到OutputStream
- 28. 生成枚舉直接從DB
- 29. 程序可以直接從代碼生成類圖
- 30. 如何生成私有LINQ to SQL類?
實體框架和其他「企業級」ORM在這方面與LinqToSql有相同的問題。 ORM中的POCO支持通常會帶來重大的折衷。 – 2009-12-01 10:38:53