使用 WCF 和实体框架的客户端服务器

Posted

技术标签:

【中文标题】使用 WCF 和实体框架的客户端服务器【英文标题】:Client Server using WCF and Entity Framework 【发布时间】:2014-01-06 22:01:58 【问题描述】:

我正在开发一个业务线应用程序,由于我无法控制的原因,它必须使用客户端服务器架构。

即客户端都连接到应用服务器,应用服务器连接到数据库等。

为了做到这一点,我在过去创建了一个 WCF 服务,该服务公开了数据库的 CRUD 类型方法。 WCF 中存在这样的方法:

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

但是我总是发现同样的两个问题:

1) 有很多管道代码连接:客户端 -> 应用服务器 -> 数据库服务器

2) 当客户端应用程序需要获取更复杂的数据时,我最终不得不在服务器端添加方法,这最终会导致如下可怕的事情:

Customer GetCustomerByNameWhereCustomerHasBoughtProduct(string name, int productCode);

或者返回比需要更多的数据并在客户端进行处理。这对数据库来说很慢而且非常糟糕。比如:

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 服务公开数据库?或者任何其他可以帮助我正在做的事情的想法?

理想情况下,我会说客户端可以直接连接到数据库,但是我被告知这是一个无法更改的问题。

非常感谢您的指点。

谢谢

【问题讨论】:

如果它是一个简单的 CRUD,请尝试 WCF 数据服务。它具有灵活的过滤功能 【参考方案1】:

考虑使用 OData 公开您的实体。然后在客户端上,您可以以类似于编写 EF LINQ 查询的方式编写 LINQ 查询。这是一篇包含详细信息的文章:

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

【讨论】:

Wcf 数据服务当然是一个合理的选择。我已经设置了一个作为测试,我很惊讶它是多么容易。但是,似乎性能可能是一个问题。请参阅此处,例如:***.com/questions/3916983/…。还有其他选择,还是我只需要在易于编程和性能之间做出选择?

以上是关于使用 WCF 和实体框架的客户端服务器的主要内容,如果未能解决你的问题,请参考以下文章

结合 WPF + WCF + 实体框架的好例子 [关闭]

WPF MVVM WCF 客户端/服务器架构

实体框架4:使用自我跟踪实体的过滤器进行预先加载(包括)

WCF 程序入门

WCF 数据服务或实体框架

将 WCF 服务与实体框架 4 和...DTO 一起使用?