решение по SP и EF & Ria Service - PullRequest
0 голосов
/ 15 апреля 2010

С выходом EF 4.0 больше поддержки SQL Server Хранимая процедура. Сложный тип может быть сгенерирован автоматически для результирующего набора данных SP. Но комплексный тип не поддерживается Ria Service.

Когда я пытаюсь использовать службу ria в сочетании с EF 4.0, я хочу получить набор данных по SP. Этот результат не отображается ни в одну сущность / таблицу.

Некоторые решения, предложенные сообществом: 1. Создайте вид для отображения результата sp. (но для EF, если нет идентификатора или первичного, не может быть сопоставлено ни с какой сущностью) 2. Создайте объект для отображения результата sp. (Для этого вам даже нужно отобразить SP для CRUD, даже если мне не нужен CUD для этого результата sp)

Также вышеуказанное решение не может быть автоматизировано. Поскольку объекты базы данных могут изменяться со временем, автоматическое обновление EDM будет потеряно над решением.

Так в чем же решение? Я хочу перенести операцию данных обратно в БД, чтобы в БД можно было внести много изменений, и нет необходимости перестраивать сборки .net (это вызывает повторное развертывание).

1 Ответ

0 голосов
/ 16 апреля 2010

У нас одна и та же проблема возникала много раз в нашем развитии. Обход, который мы решили реализовать, - это службы 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

...