2012-01-10 56 views
5

我用這個代碼來定義我的存儲過程使用存儲過程(代碼第一)

CREATE PROCEDURE [dbo].[SP] 
(@Country NVARCHAR(20)) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT c.*,O.* from Customers 
      as c inner join orders O on c.CustomerID=o.CustomerID 

    where [email protected] 
END 

,這是我的C#代碼:

IList<Entities.Customer> Customers; 

using (var context = new NorthwindContext()) 
{ 
    SqlParameter categoryParam = new SqlParameter("@Country", "London"); 
    Customers = context.Database.SqlQuery<Entities.Customer>("SP @Country", categoryParam).ToList(); 
} 

問題是在這裏:

我想從Orders表中發送數據,我的存儲過程會生成這個給我。我怎樣才能得到我的C#代碼中的Orders數據?記住我只想執行一次這個存儲過程。

回答

7

看看Does Entity Framework Code First support stored procedures?http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-4-1-using-stored-procedure-to-insert-data.aspx,它討論通過DbContext對象執行存儲過程。

我想也許你的問題是,你沒有得到回訂單作爲您的查詢的一部分?它是否正確?如果是這樣,這是因爲你只是選擇客戶。您需要創建一個與您希望從查詢返回的模式相同的對象(即具有客戶和訂單屬性)或選擇爲動態類型(eww)。

說了這麼多我強烈建議在LINQ做這個:

from c in context.Customers.Include(c=>c.Orders) 
where c.Country == country 
select c; 

這是一個更好的方法,因爲你正在使用EF什麼其設計,而不是查詢的東西不適合你模型

+0

tnkx爲你很好和完整answer.but現在,我怎樣才能從我的存儲過程中選擇linq的動態類型。 – 2012-01-11 06:11:26

+0

即時通訊不是100%肯定,但類似var customers = context.Database.SqlQuery (「SP @Country」,categoryParam).ToList();將可能是正確的 – 2012-01-11 07:14:31

+0

tnkx我會嘗試你的解決方案 – 2012-01-11 07:16:27

相關問題