безболезненный способ перенести доступ к данным из настольного приложения в сервис wcf - PullRequest
1 голос
/ 19 января 2012

У меня есть приложение, которое использует Entity Framework для доступа к данным, и во всем коде есть такие операторы 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 .: Я взглянул на OData WCF Data Services, но есть некоторые функции, которые у меня не работают, ислужба не должна быть RESTful.

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Я бы пошёл шаг за шагом.

Измените все вызовы базы данных на уровень обслуживания на стороне клиента.

Вместо:

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

Вам нужно позвонить примерно так:

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

Как только все ваши вызовы базы данных будут перемещены на уровень службы, вам будет проще выделить это в службу WCF, которая может выполнять эти запросы за вас.

0 голосов
/ 19 января 2012

Entity Framework не поддерживает плавный переход к использованию через WCF.WCF Data Services - самый близкий вариант здесь.Насколько мне известно, единственный ORM, который фактически поддерживает плавный переход запросов через границы WCF непосредственно для WPF и обычных проектов .NET, это Lightspeed 4 .

. Таким образом, вам необходимо эффективнопереместите свои запросы в службу WCF, а затем измените клиента на вызовы службы WCF.Это накладывает дополнительные ограничения на вашего клиента, поскольку вы больше не работаете непосредственно с контекстами EF, а скорее с API-интерфейсом ссылки на сервис.

...