Entity Framework CTP5 - Как вызвать хранимую процедуру? - PullRequest
9 голосов
/ 25 января 2011

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

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

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

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

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

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

EDIT:

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

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

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

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

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

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

1 Ответ

9 голосов
/ 25 января 2011

Вы можете выполнять 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");
}
...