9

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

在实体框架4.0,我们这样做:

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

这是ObjectContext上的一种方法。

但是DbContext没有这样的方法。

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

编辑:

我发现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 2011-01-25 22:54:13