2012-11-27 61 views
2

說我得到了這樣的情況:我有過濾我的數據實體這是我從一個存儲過程中得到的一個:如何查詢存儲過程的對象使用LINQ

var results = from c in db.Customer 
join p in db.GetSPResults() on c.Id equals p.Id 
select c; 

我Context類我得到這個:

public ObjectResult<Example> GetSPResults() 
{ 
    return (this as IObjectContextAdapter).ObjectContext.ExecuteFunction<Example>("Proc_Example"); 
} 

到目前爲止,我遇到兩個問題:

  1. 我得到一個InvalidOperationException時碼罷工日ËExcecuteFunction行:

    的FunctionImport 'XXX' 不能在容器中發現的 'XXX'

  2. 假設你們可以幫助我解決這個問題,是否有可能這樣查詢?像上下文實體一樣使用這些存儲過程結果?我認爲英孚不會允許這會導致它不是一個實體,也不是一個「恆定價值」。

我正在使用EF 4.3。

回答

1

,而不是調用你的程序一樣,通過名稱作爲字符串,你可以在你的實體模型導入它,那麼你可以在你的DbContext直接有一個類型安全/強類型的方法調用。

基本上你需要執行一個功能入口,在這裏看到了一個例子:Using stored procedures with Entity Framework

更新:對於POCO /代碼首先,在這裏看到:我使用POCO EF Code-First - Mapping stored procedures

+0

。模型創建數據庫,但是您知道是否可以使用POCO定義存儲過程或視圖? –

+0

謝謝!不過,我已經試過了,'SqlQuery'方法的結果將不會用於查詢工作(由於我對第2項命名的原因,它不是一個實體或一個恆定值)。任何其他想法? –

+0

好的我已經做了它從存儲過程返回一個id列表。這樣linq理解它可以很好地查詢。謝謝我會發布答案。 –