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生成的類中使用DataAnnotations
- 3. 使用LINQ生成素數
- 4. 直接從Makefile生成RPM
- 5. 使用Gmail消息源,生成直接鏈接
- 6. 使用文本輸入在activeadmin中直接鏈接生成
- 7. Linq使用生成的POCO類在EF4中的實體
- 8. 自動生成的linq類是空的?
- 9. 生成的LINQ類中的繼承?
- 10. youtube-dl如何生成直接鏈接?
- 11. 在asp.net生成的表上使用linq
- 12. 使用LINQ進行左外連接 - 生成不同的輸出
- 13. 直播Xcode的接口生成器UIView子類(IB_DESIGNABLE)無的drawRect:
- 14. 如何使用LINQ生成新類型的對象
- 15. 結合使用UIHint與LINQ to SQL生成的類
- 16. ASP.NET MVC2 - 使用LINQ生成的類(驗證問題)
- 17. Linq to SQL對象類的生成
- 18. ASP .NET MVC + LINQ生成的類+ DataAnnotations
- 19. 將LINQ擴展到SQL生成的類
- 20. 生成的C#LINQ to SQL類
- 21. 生成可直接在URL中使用的加密字符串
- 22. 直接保存使用php生成的圖像
- 23. 直接生成powerset的特定子集?
- 24. 是否可以直接從數據庫中使用Doctrine 2生成模型類?
- 25. 生成Linq DataContext
- 26. 使用linq生成合並列表
- 27. 使用LINQ to XML生成xml
- 28. 使用outerIt生成動態Linq查詢
- 29. 使用Linq生成新時序ID
- 30. 使用Linq從Northwind DB生成報告
實體框架和其他「企業級」ORM在這方面與LinqToSql有相同的問題。 ORM中的POCO支持通常會帶來重大的折衷。 – 2009-12-01 10:38:53