9

Это может быть простой ответ, но я не вижу, как выполнить хранимую процедуру с помощью EF CTP5.Entity Framework CTP5 - Как вызвать сохраненную процедуру?

В Entity Framework 4.0, мы сделали это:

ExecuteFunction("ContainerName.StoredProcName", new ObjectParameter("Id", id)).

Каков метод на ObjectContext.

Но DbContext не имеет такого метода.

Как мы называем хранимую процедуру? Не поддерживается ли это в EF CTP5?

EDIT:

Я нашел this thread, в котором говорится, что вам нужно сделать это:

var people = context.People.SqlQuery("EXECUTE [dbo].[GetAllPeople]"); 

Это вызывает некоторые опасения:

1) Вы теперь называют хранимая prodedure на , а не контекст. Хранимые процедуры должны быть доступны в контексте, не привязанные к определенному набору объектов. Точно так же, как они находятся под «Базой» в SQL Server, а не под «Таблицей».

2) Как насчет сложных типов? Ранее я возвращал сложный тип из хранимой процедуры. Но теперь, похоже, вам нужно сопоставлять данные напрямую с сущностью? Это не имеет никакого смысла. У меня есть много хранимых процедур, которые возвращают тип, не представленный непосредственно ObjectSet/DBSet, который я не вижу, как я могу потянуть.

Надеюсь, что кто-то может очистить это для меня, потому что из того, что я понимаю до сих пор, я не смогу перейти на CTP5.

ответ

9

Вы можете выполнять операторы SQL базы данных в масштабах, как этот

using(var context = new MyContext()) 
{ 
    // custum sql statement 
    var c = context.Database.SqlQuery<int>("SELECT COUNT(*) FROM Employees"); 

    // returned entity type doesn't have to be represented by ObjectSet/DBSet 
    var e = context.Database.SqlQuery<Employee>("SELECT * FROM Employees"); 

    // stored procedure 
    var q = context.Database.SqlQuery<Employee>("GetEmployees"); 
} 
+0

Какой именно то, что я положил в моем редактировать мой вопрос. – RPM1984

+2

Это отвечает на вашу первую заботу. SP доступны в масштабе контекста. DbContext.Database - это ссылка на встроенный объект DbDatabase. Это отличается от context.People.SqlQuery, который работает на DbSet. –

+0

Ах, ваше право, даст вам возможность вернуться и вернуться к вам. – RPM1984

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