将数据访问从桌面应用程序转移到 WCF 服务的轻松方法

发布于 2024-12-27 15:12:51 字数 713 浏览 0 评论 0原文

我有一个使用实体框架来访问数据的应用程序,整个代码都有这样的 linq 语句:

var idsOrfaos = context.Items.Cast<OrdemAberta>()
                             .Select(p => p.OS)
                             .Except(IdsBd);

和 SQL 语句:

    var resumo = context.Database.SqlQuery<ViewModelSla>(
                    @"select * from table where blablabla", 
new object[] { new SqlParameter("parameteer", "parameteer) }
                           ).OrderBy(p => p.Ano).ThenBy(p => p.Mes);

这是一个 WPF 应用程序。

我的问题是:如何将所有数据访问(出于提高安全性和其他原因)转移到 WCF 服务,以便轻松地通过 HTTP 使用?我必须重写WCF应用程序中的所有访问方法并在WPF中调用?

obs.:我查看了 WCF 数据服务 OData,但有些功能对我不起作用,并且该服务不需要是 RESTful 的。

I have an application that uses Entity Framework to access the data, and throughout the code have linq statements like this:

var idsOrfaos = context.Items.Cast<OrdemAberta>()
                             .Select(p => p.OS)
                             .Except(IdsBd);

and SQL Statements too:

    var resumo = context.Database.SqlQuery<ViewModelSla>(
                    @"select * from table where blablabla", 
new object[] { new SqlParameter("parameteer", "parameteer) }
                           ).OrderBy(p => p.Ano).ThenBy(p => p.Mes);

It's a WPF application.

My question is: how to move all the data access (for improve security and other reasons) to a WCF service to use over HTTP in a painless way? I have to rewrite all the access methods in the WCF application and call in WPF?

obs.: I has took a look in WCF Data Services OData but there are some functions that doesn't work for me, and the service don't need to be RESTful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小糖芽 2025-01-03 15:12:51

我会采取一步一步的方法。

将所有数据库调用重构为客户端服务层。

而不是:

var idsOrfaos = context.Items.Cast<OrdemAberta>()
                         .Select(p => p.OS)
                         .Except(IdsBd);

您应该进行如下调用:

var idsOrfaos = Application.ItemService.GetAllExcept(IdsBd);

将所有数据库调用移至服务层后,将更容易将其分解到可以为您执行这些查询的 WCF 服务中。

I would take a step by step approach.

Refactor all database calls into a client side service layer.

Rather than:

var idsOrfaos = context.Items.Cast<OrdemAberta>()
                         .Select(p => p.OS)
                         .Except(IdsBd);

You should have a call something like this:

var idsOrfaos = Application.ItemService.GetAllExcept(IdsBd);

Once all your database calls have been moved into a service layer, it will be easier to factor this out into a WCF service that can perform these queries for you.

陪你到最终 2025-01-03 15:12:51

实体框架不支持无缝过渡到跨 WCF 使用。 WCF 数据服务是最接近的选项。据我所知,唯一真正支持 WPF 和普通 .NET 项目跨 WCF 边界无缝转换查询的 ORM 是 光速4

因此,您需要有效地将查询转移到 WCF 服务中,然后更改客户端以调用 WCF 服务调用。这给您的客户端带来了额外的限制,因为您不再直接在 EF 上下文上工作,而是在服务引用 API 上工作。

Entity framework doesn't support a seamless transition to using across WCF. WCF Data Services is the closest option here. To my knowledge, the only ORM that actually supports seamless transition of queries across WCF boundaries for WPF and normal .NET projects directly is Lightspeed 4.

As such, you'd need to effectively move your queries into your WCF service, and then change the client to call WCF service calls. This puts extra restrictions on your client, as you're no longer working directly on the EF contexts, but rather on the service reference API.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文