2013-12-18 86 views
2

我正在開發一系列業務應用程序,由於我無法控制的原因,它必須使用客戶端服務器架構。使用WCF和實體框架的客戶端服務器

I.e.客戶端都連接到應用程序服務器,應用程序服務器連接到數據庫等。

要做到這一點,我創建了一個WCF服務,該服務公開數據庫的CRUD類型方法。這樣的方法,存在於WCF:

Customer GetCustomer(int customerId); 
List<Customer> GetAllCustomers(); 
etc... 

但是我一直覺得同樣的兩個問題與此:

1)有其連接的管道代碼很多:客戶端 - >應用服務器 - >數據庫服務器

2)當客戶端應用程序需要獲取更復雜的數據,我最終不得不增加它結了這樣可怕的事情在服務器端方法:

Customer GetCustomerByNameWhereCustomerHasBoughtProduct(string name, int productCode); 

OR

或者返回比客戶端需要和處理更多的數據。這對數據庫來說很慢並且非常糟糕。例如:

List<Customer> customers = _Service.GetAllCustomers(); 
List<Product> products = _Service.GetAllProducts(); 

List<Customer> customersWhoBoughtX = (from c in customers where 
         c.OrderLog.Contains(products.Where(p => p.Code == x) 
         select c).ToList() 

我在做什麼錯在這裏,因爲這一定是可以解決的方式。

有沒有辦法使用約定通過wcf服務公開數據庫?或者任何其他的想法可以幫助我在做什麼?

理想情況下,我會說客戶端可以直接連接到數據庫,但我被告知這是一個無法更改的問題。

我真的很感激一些指針。

謝謝

+1

如果它是一個簡單的CRUD,嘗試WCF數據服務。它具有靈活的過濾 – LostInComputer

回答

0

考慮使用OData公開您的實體。然後在客戶端上,您可以編寫類似於編寫EF LINQ查詢的方式編寫LINQ查詢。下面是與細節的文章:

http://www.vistadb.net/tutorials/entityframework-odata-wcf.aspx

+0

Wcf數據服務無疑是一個合理的選擇。我已經設置了一個作爲測試,我很驚訝它是多麼容易。然而,看起來性能可能是一個問題。看到這裏例如:http://stackoverflow.com/questions/3916983/how-to-improve-wcf-data-services-performance。還有其他的選擇嗎?還是我只需要在編程和性能之間進行選擇? –

相關問題