2010-07-08 236 views
0

我們在EF4模型中使用函數導入來填充模型中的現有實體。模型中的實體具有我們正努力映射的Id的Key字段,因爲我們的存儲過程不會返回Id字段。我已經嘗試將映射中的值設置爲0的文字值,但失敗時會出現EntityCommandExecutionException和以下異常文本。存儲過程映射實體框架

數據讀取器與指定的「候選」不兼容。類型成員'Id'在數據閱讀器中沒有相應的列,名稱相同。

修改存儲過程以返回虛擬Id字段的缺點任何人都可以推薦最佳方法是什麼,因爲虛擬字段選項對我來說非常笨重。

非常感謝

回答

0

如果您不能返回足夠的數據來完全實現實體 - 和ID字段是肯定將被要求爲 - ,那麼你需要改變返回類型上過程是一個複雜的類型,而不是一個實體。

+0

感謝您的答覆克雷格。我們基本上試圖做的是僅僅從一個不同的數據庫表添加一個Candidate到上下文,所以通過直接映射到存儲的proc和函數導入,它使我們不必從函數返回的複雜類型映射到候選實體在代碼中。 如果這就是我們所要做的,那就沒問題,但是看起來奇怪的是,當EF知道sp的返回模式並且知道它永遠不會對候選者進行工作時,EF將允許我綁定到候選實體。這導致我相信我們錯過了一些東西。 – 2010-07-09 19:00:20

0

使用另一個POCO類具有相同結構的接收存儲過程調用的結果,這裏有一個例子:

string sp = string.Format("EXEC dbo.spComercialesAsociadosActivos {0}", idComercialPrincipal); 
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<InfoComercial>(sp); 

在這種情況下,「InfoComercial」是POCO類具有相同的結構爲「COMERCIAL 「,它與DBContext中的第一個EF代碼綁定,然後我在viewModel中使用這個獨立的類創建了一個不連接的」Comercial「,它不是一個理想的解決方案,但是直到EF 5支持SP才能正常工作。