Silverlight 4 и хранимые процедуры - PullRequest
1 голос
/ 03 ноября 2010

После дня исследований и испытаний у меня складывается впечатление, что вы не можете вызывать хранимые процедуры из Silverlight 4, используя службы WFC RIA.

Это просто не может быть правдой.

Поскольку Silverlight очень сфокусирован на отчетах, я не верю, что нет способа вызвать хранимые процедуры.

Можно ли использовать хранимые процедуры со службами Silverlight и RIA?

Если нет, есть ли обходной путь для совокупных наборов данных>?

Ответы [ 2 ]

5 голосов
/ 03 ноября 2010

Вы должны добавить его в свою модель как функцию, а затем вызвать ее как члена DomainService. Главное, что результат хранимой процедуры должен точно соответствовать сущности, потому что службы RIA не позволят вам использовать результат сложного типа.

Существует также возможность не использовать RIA и использовать службу WCF с поддержкой Silverlight. Однако вы потеряете все функции DomainService, такие как LINQ, но получите больший контроль над тем, что возвращается и как.

2 голосов
/ 08 февраля 2011

На этом сайте я нашел следующее превосходное пошаговое руководство -

http://betaforums.silverlight.net/forums/p/218383/521023.aspx

1) Добавьте модель данных объекта ADO в ваш веб-проект; Выберите вариант «Сгенерировать из базы данных»; Выберите экземпляр базы данных для подключения.

2) Выберите объект БД для импорта в модель. Вы можете развернуть узел Таблица, чтобы выбрать любую таблицу, которую вы хотите импортировать в Модель. Разверните узел «Хранимая процедура», чтобы выбрать также сохраненную процедуру. Нажмите Готово, чтобы завершить импорт.

3) Щелкните правой кнопкой мыши конструктор модели БД и выберите «Добавить / Импорт функции». Дайте функции имя (то же имя, что и у вашего SP), и выберите хранимую процедуру, которую вы хотите отобразить. Если ваш SP возвращает только одно поле, вы можете отобразить возвращаемый результат в коллекцию скаляров. Если ваш SP возвращает более одного поля, вы можете сопоставить возвращаемый результат с коллекцией или Entity (если все поля взяты из одной таблицы) или с коллекцией сложных типов.

Если вы хотите использовать сложный тип, вы можете нажать кнопку Получить столбец, чтобы получить все столбцы для вашего SP. Затем нажмите кнопку Создать новый сложный тип, чтобы создать этот сложный тип.

4) Добавить класс доменной службы в веб-проект. Выберите DataModel, который вы только что создали, в качестве DataContext этой службы. Выберите весь энтит, который вы хотите выставить клиенту. Сервисные функции должны быть сгенерированы для этих объектов.

5) Возможно, вы не видите тип Complex в списке Entity. Вы должны вручную добавить функцию запроса для вашего SP в вашем Сервисе: Скажем, ваш SP называется SP1, а созданный вами комплексный тип называется SP1_Result.

Добавьте следующий код в ваш класс обслуживания домена:

public IQueryable<SP1_Result> SP1()
    {
        return this.ObjectContext.SP1().AsQueryable();            
    }

Теперь вы можете скомпилировать ваш проект. Вы можете получить сообщение об ошибке, подобное этому: «SP1_Result не имеет ключа» (если вы не участвуете в RIA service SP1 beta). Если вы это сделаете, вам нужно сделать следующее в файле метаданных службы:

Добавлен класс метаданных SP1_Result и помечено поле Key:

[MetadataTypeAttribute(typeof(SP1_Result.SP1_ResultMetadata))]
public partial class SP1_Result
{
    internal sealed class SP1_ResultMetadata
    {
        [Key]
        public int MyId;  // Change MyId to the ID field of your SP_Result
    }
} 

6) Скомпилируйте ваше решение. Теперь у вас есть SP1_Result для клиента. Проверьте сгенерированный файл, вы должны увидеть, что SP1_Result генерируется как класс Entity. Теперь вы можете получить доступ к DomainContext.SP1Query и DomainContext.SP1_Results в вашем коде Silverlight. Вы можете обращаться с ним так же, как с любым другим классом Entity (сущность, сопоставленная с таблицей).

...