2010-09-30 86 views
0

所以我有一個客戶的要求,只爲所有數據庫操作使用存儲過程。我爲每個表創建了CRUD存儲過程,然後創建了我的實體模型。實體讀取存儲過程映射?

因此,我很容易地看到如何將我的插入,更新和刪除存儲過程映射到我的實體(例如Customer),但似乎沒有辦法映射我的Select?這只是一個普通的舊選擇,它應該返回一個我的客戶實體列表 - 所以它直接映射到我的實體類型,它不是自定義的。這似乎是做到這一點的唯一方法是導入一個函數並映射它。

那麼爲什麼沒有能力直接映射選擇?這樣做會對我有巨大的好處!

也許我的存儲過程不太合適?

任何人有任何想法?

回答

2

您將使用EF中的功能,允許您將存儲過程添加到圖中,並且這些將成爲您可以直接調用的方法。如果您打開模型瀏覽器,然後追蹤您添加的SELECT過程,則可以雙擊每個過程並將返回類型綁定到實體模型。然後調用約定將

MyEntity entity = myDB.MyStoredProcedure().FirstOrDefault(); 

HTH, 喬恩

+0

這是一個解決辦法,這是我現在用的。但它並沒有真正解決問題 - 例如使用DomainService類,它想要使用Customer屬性來獲取屬性 - 我必須手動更改我的服務以使用我的導入函數 - 如果需要重新生成我的服務服務。插入更新和刪除可以被映射,以便在實體級別使用它們。但是你不能做這個選擇。 – Nicros 2010-10-01 18:06:08

+0

這不是真正的「解決方法」,它似乎在邏輯上合法。對於選擇,正如我所提到的(「將返回類型綁定到實體模型」),存儲過程可以直接映射到實體類型,而不是特定於存儲過程函數的類型。所以,在我的例子中,MyStoredProcedure()返回MyEntity的一個實例,而不是其他的東西。默認情況下,這是另一回事,您必須手動將輸出映射到MyEntity從導入的接口級別,這是將sproc分配給實體的另一端。真的不同,只是不同的地方。 – 2010-10-06 05:39:13

+1

對不起,如果我沒有足夠的幫助,但要回答你原來的問題,如果lib仍然有這個限制,沒有太多可以做的。現在我仍然不滿意通過SPROC的INSERT不會將IDENTITY列綁定到輸出參數。對於被認爲是「企業級」的人來說,EF4還是非常可悲的,不用感謝這一點以及必須產生的解決方法。 – 2010-10-06 05:39:55