2015-08-26 2 views
0

Прежде всего, я искал решения, но, возможно, я не сделал это хорошо, потому что мне могут не хватать некоторых концепций.Entity framework не генерирует класс результатов

Итак, моя проблема: я разрабатываю приложение для работы с базой данных с использованием Entity Framework. Я создаю модель, используя «EF Designer from database», импортирую все таблицы, функции и хранимые процедуры. Проблема следующая. Когда C# генерирует код, он также генерирует класс, подобный «storedProcedureName_Result», который, как следует из названия, является результатом хранимой процедуры. C# генерирует код, как:

public virtual ObjectResult<uSP_ListSpecialities_Result> uSP_ListSpecialities() 
    { 
     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<uSP_ListSpecialities_Result>("uSP_ListSpecialities"); 
    } 

и без результата:

public virtual ObjectResult<Nullable<int>> uSP_ListAvailableMedicBi() 
     { 
      return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("uSP_ListAvailableMedicBi"); 
     } 

Мне нужно использовать эти результаты, но C# не генерирует эти результаты для всех хранимых процедур. И это моя проблема, я понятия не имею, почему.

например: Эта хранимая процедура создает класс результата:

CREATE PROCEDURE uSP_ListSpecialities 
AS 
BEGIN 
    SELECT id, nome 
    FROM Especialidade 
END 

он генерирует uSP_ListSpecialities_Result класс

но это один не делает:

CREATE PROCEDURE uSP_ListAvailableMedicBi 
AS 
BEGIN 
    SELECT P.biPessoa 
    FROM Pessoa P 
     LEFT JOIN Medico M 
      ON(M.biPessoa = P.biPessoa) 
    WHERE M.biPessoa IS NULL 
END 

Я побежал как на SQLSMS и оба вернули то, что предполагалось.

Спасибо заранее

+0

Из того, что я помню, при импорте sp через дизайнера вы можете выбрать «Создать новый сложный тип». – Ric

+0

@Ric Вы правы, но почему кто-то захочет генерировать сложный результат для процедуры, которая просто возвращает Nullable ? – MajkeloDev

+0

Не знаю, не имеет особого смысла, может быть, причина? – Ric

ответ

1

uSP_ListAvailableMedicBi Процедура возвращает Nullable Integer, так что точка для генерации результата класса, если это просто стандартный тип .NET?

EDIT.

В соответствии с вашими комментариями. Он возвращает таблицу для вас. Он просто не создавал сложный тип, поскольку он не нужен. Отрывок ниже поможет Вам:

public List<int> GetAvailableMedicBiList() 
{ 
    using(var ctx = YourEntities()) 
    { 
     return (List<int>)ctx.uSP_ListAvailableMedicBi().ToList(); 
    } 
} 
+0

Я хочу сказать, что uSP_ListAvailableMedicBi должен возвращать таблицу с атрибутом P.biPessoa. uSP_ListSpecialities генерирует результат. Хорошо, я не указал параметр return, но почему вы генерируете результат, а другой генерируете значение NULL? –

+0

Затем сделайте так, как было предложено, и выберите SP в браузере модели и создайте новый сложный тип. – Ric

+0

Я отредактирую для вас, чтобы показать вам, как это работает. – MajkeloDev

1

Я создал фиктивную зр возвращающий int и получить следующее:

enter image description here

Здесь можно увидеть, что я выбрал Complex как сбор возвратов и Я щелкнул внизу Create New Complex Type, который создал для меня объект, который, как я полагаю, вам нужен.

+1

OP получил то, что хотел, но я не могу найти повод для этого. – MajkeloDev

+0

На вашем SP вы определили значение как OUTPUT? –

+0

Sp был более простым, чем ваш, только «SELECT 1» - вот и все. – Ric

Смежные вопросы