2012-01-24 61 views
2

我甚至不太確定如何正確地說出這一點,但在這裏。Linq查詢結合來自數據庫連接和數據服務引用的ADO.Net實體嗎?

我有兩個.NET Web應用程序。一個提供了一個WCF數據服務(「DEPT_DataService」),它提供對多個實體集(「DEPT_Entities」)的訪問。另一個是提供Web接口的MVC2應用程序,並且還具有自己的ADO.net實體,這些實體由本地MSSQL數據庫支持。

使用過度,基本結構來說明:

比方說,WCF數據服務的應用程序包括一個單一的實體集,「部門」,由「部門」表中的本地SQL數據庫支持。其中包含公司所有部門的列表,以及該部門的主要聯繫人的員工ID。

讓我們也說,MVC2應用程序包括一個單一的實體集,「員工」,其中包含了一堆人的名單,包括他們的名字和他們的僱員ID。

我有DEPT_Entities添加到MVC2應用程序作爲服務引用,「DEPT」。當我在對象瀏覽器中查看該服務引用時,我看到「DEPT_Entities」和「Departments」。

我想要做的就是定義一個關係,讓我通過LINQ中,提到這樣的事情:

Employee firstEmployee = db.Employees.First(); 
Department[] firstEmployeesDepts = firstEmployee.Departments.toList(); 

...換句話說,我基本上是想有一個導航屬性,提供了一個在本地數據庫中找到的Employee實體與在遠程數據服務中找到的Department實體之間的一對多關係。

這是可行的嗎?怎麼樣?

謝謝!

回答

1

如果您想直接訪問數據庫沒有一個Web服務:

您可以使用SQL Server技巧(視角的鏈接服務器的內部遠程查詢),使LINQ2SQL能夠查詢遠程表。本質上,你模擬遠程表只是一個普通的本地表(一個視圖,但L2S不關心)。

這會工作,但它不會是漂亮。

如果你想在一個表的前一個web服務:這是行不通的,因爲L2S不理解web服務。

事實上,我會建築建議對hinding您調用web服務的事實。

+0

感謝您的意見。我不想隱瞞自己正在使用Web服務 - 但是想要設置的東西,因此運行類似於本地表與Web服務提供的數據之間的「連接」的操作很簡單。有沒有一個聰明的方法來做到這一點? – DanM

+0

不幸的是,沒有。我的經驗是,你也不想這樣做。如果您明確地進行數據訪問,這可能是最好的。數據訪問具有性能影響並可能失敗。在編碼過程中意識到這一點是很好的。 – usr

+0

當開發者試圖抽象出數據訪問時,典型的選擇n + 1問題最常出現。它只是不這樣工作。 – usr