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

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


person Gustavo F    schedule 18.01.2012    source источник


Ответы (2)


Я бы выбрал пошаговый подход.

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

Скорее, чем:

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

У вас должен получиться примерно такой вызов:

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

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

person armen.shimoon    schedule 18.01.2012

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

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

person Reed Copsey    schedule 18.01.2012