У нас одна и та же проблема возникала много раз в нашем развитии. Обход, который мы решили реализовать, - это службы WCF RIA с POCO (простой старый объект CLR).
Используя POCO, мы можем реализовать доменную службу, которая связывается с клиентом посредством объекта, который мы создаем вручную. Это дает нам доступ к базе данных через любую технологию (EF или что-либо еще) на сервере, что позволяет нам использовать хранимую процедуру и использовать RIA на клиенте.
Конечно, этот процесс добавляет интересный шаг в систему. Вы должны будете поддерживать свой POCO в соответствии с хранимой процедурой вашей БД.
Простой пример:
[EnableClientAccess()]
public class FooBarService : LinqToEntitiesDomainService<MyDBEntities>
{
public IQueryable<FooBar> GetFooBar()
{
var qry = from FooBarSPs in this.ObjectContext.FooBarSPs
orderby FooBarSPs.Name
select new FooBar
{
ID = FooBarSPs.ID,
Name = FooBarSPs.Name
};
return qry;
}
}
Если вам необходимо использовать службы WCF RIA и вы хотите поговорить с хранимой процедурой, использование объектов POCO в качестве мессенджеров - самый простой способ, который я видел, сделать это.
Я рекомендую посмотреть выступление Брэда Абрама на Mix 09 в прошлом году:
http://videos.visitmix.com/MIX09/T40F