【问题标题】:Linq query combining ADO.Net entities from a database connection and a data service reference?Linq 查询结合来自数据库连接和数据服务引用的 ADO.Net 实体?
【发布时间】:2012-01-24 20:09:09
【问题描述】:

我什至不太清楚如何正确地表达这个,但这里是。

我有两个 .net Web 应用程序。一个提供 WCF 数据服务(“DEPT_DataService”),它提供对多个实体集(“DEPT_Entities”)的访问。另一个是提供 Web 界面的 MVC2 应用程序,也有自己的 ADO.net 实体,这些实体由本地 MSSQL 数据库支持。

使用过于基本的结构来说明:

假设 WCF 数据服务应用程序包含一个实体集“Departments”,由其本地 SQL 数据库中的“Departments”表支持。这包含公司所有部门的列表,以及该部门主要联系人的员工 ID。

假设 MVC2 应用程序包含单个实体集“Employees”,其中包含一组人员的列表,包括他们的姓名和员工 ID。

我已将 DEPT_Entities 作为服务参考“DEPT”添加到 MVC2 应用程序。当我在对象浏览器中查看该服务引用时,我看到了“DEPT_Entities”和“Departments”。

我想做的是定义一个关系,允许我通过 Linq 引用这样的东西:

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

...换句话说,我本质上想要一个导航属性,它提供本地数据库中的 Employee 实体和远程数据服务中的 Department 实体之间的一对多关系。

这可行吗?怎么样?

谢谢!

【问题讨论】:

    标签: c# sql-server ado.net wcf-data-services


    【解决方案1】:

    如果您想直接访问数据库而不需要 Web 服务:

    您可以使用 SQL Server 技巧(视图内的远程查询到链接服务器)使 Linq2SQL 能够查询远程表。本质上,您模拟远程表只是一个普通的本地表(视图,但 L2S 不关心)。

    这会起作用,但它不会很漂亮。

    如果您想在其中一张表前面有一个 web 服务:这将不起作用,因为 L2S 不理解 web 服务。

    事实上,我在架构上建议不要隐藏您正在调用 Web 服务这一事实。

    【讨论】:

    • 感谢您的建议。我不想隐瞒我正在使用 Web 服务——不过,我希望进行设置,以便在本地表和 Web 服务提供的数据之间运行类似于“连接”的东西是微不足道的.有没有聪明的方法来做到这一点?
    • 不幸的是,没有。我的经验是,你也不想那样做。最好是明确地进行数据访问。数据访问会影响性能并且可能会失败。在编码过程中意识到这一点是件好事。
    • 典型的选择 n+1 问题最常出现在开发人员试图抽象出数据访问时。它只是不能那样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多