2012-01-10 11 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データを取得するにはどうすればよいですか?私はこのストアドプロシージャを1回だけ実行したいと思います。

答えて

7

DbContextオブジェクト経由でストアドプロシージャを実行することについて話している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を見てください。

おそらくあなたの問題は、あなたがあなたの質問の一部として注文を返さないということでしょうか?これは正しいです?そうしているのは、顧客を選択しているだけなのでです。クエリから返される(つまりcustomerプロパティとorderプロパティの両方を持つ)同じスキーマのオブジェクトを作成するか、動的型(eww)を選択する必要があります。

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

をあなたがそのために設計されたもののためにEFを使用して、あなたに合わないもののために照会されていないので、これははるかに優れたアプローチです:

は、私は強く代わりにLINQでこれを行うことをお勧めしますと言いましたモデル

+0

tnkxいいえ、完全な答えです。しかし、私はどのように私のストアプロシージャからlinqで動的なタイプを選択することができます。 –

+0

私は100%確信していませんが、var customers = context.Database.SqlQuery ( "SP @Country"、categoryParam).ToList();おそらく約右でしょう –

+0

tnkx私はあなたのソリューションを試してみます –

関連する問題