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