9

这可能是一个简单的答案,但我看不到如何使用 EF CTP5 执行存储过程。

在 Entity Framework 4.0 中,我们这样做了:

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

这是ObjectContext.

但是DbContext没有这样的方法。

我们如何调用存储过程?EF CTP5 不支持吗?

编辑:

我找到了这个线程,它指出你需要这样做:

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

这引起了一些担忧:

1)您现在正在调用 set 上的存储过程而不是context。存储过程应该在上下文范围内可用,而不是绑定到特定的实体集。就像它们在 SQL Server 中的“数据库”下而不是在“表”下一样。

2)复杂类型呢?我以前有一个从存储过程返回的复杂类型。但是现在,您似乎必须直接映射到实体?这没有任何意义。我有许多存储的过程,它们返回的类型不是由 ObjectSet/DBSet 直接表示的,我不知道如何才能将其拉过来。

希望有人可以为我解决这个问题,因为据我所知,我将无法升级到 CTP5。

4

1 回答 1

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");
}
于 2011-01-25T16:06:10.293 回答