2009-12-01 98 views

回答

2

你可以這樣做。通常我會將Linq包裝到SQL類中,但如果應用程序很小,則可以直接使用存儲庫方法。

如果應用程序較大,則可以添加業務層。

1

如果您確實需要從您的sql數據庫的模型中進行抽象,那麼Linq-To-Sql可能是錯誤的選擇。當然,你可以使它工作(但這不是它的目的)。

如果您需要這種抽象級別,您將需要轉向更「企業」的ORM,如Entity Framework。他們需要更多的配置,用於指定更復雜的映射,使您的對象模型和數據庫模型彼此不相似,另一方面,如果這是過度殺傷,那麼使用Ling to Sql。這很簡單,而且很簡單,只要你堅持使用簡化的映射方法即可。

+0

實體框架和其他「企業級」ORM在這方面與LinqToSql有相同的問題。 ORM中的POCO支持通常會帶來重大的折衷。 – 2009-12-01 10:38:53

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對象。