Сервисы RIA, EF и хранимые процедуры - PullRequest
0 голосов
/ 26 ноября 2009

У меня эта проблема уже 2 месяца

Как я могу использовать хранимые процедуры с RIA.

Я использовал LinqToSql, и все работает нормально.

Я создал класс в конструкторе и сопоставил его с SP.

Теперь в EF я видел этот ComplexTypes, который я импортировал son SP с результатом в ComplexTypes.

Но в DomainDataSource не отображаются.

OK.

Но как я могу их использовать?

Мне нужно только получить некоторые данные.

Я перепробовал все решения (List, IList и т. Д.), Но получаю

Невозможно привести объект типа «System.Data.Metadata.Edm.ComplexType» к типу «System.Data.Metadata.Edm.EntityType». BusinessApplication2

Есть какие-нибудь решения, пожалуйста?

Ответы [ 2 ]

1 голос
/ 28 ноября 2009

Проблема с хранимыми процедурами заключается в том, что сервисные инструменты RIA не могут «увидеть», какие столбцы возвращает хранимая процедура.

Следовательно, отсутствует много кода, который мог бы быть сгенерирован.

Не тот ответ, который вы ищете, но решение не использовать сохраненные процедуры.

0 голосов
/ 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 (сущность, сопоставленная с таблицей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...