2013-01-18 65 views
11

我有一些使用Database First在實體框架中映射的存儲過程。它創建可以調用以運行存儲過程的強類型方法。然而,我遇到了一個重大問題,因爲我沒有看到用存儲過程中定義的默認參數調用它創建的這些方法。這意味着:實體框架 - 使用默認參數調用存儲過程

a)我必須手動將默認參數添加到方法調用中,如果默認參數值永遠不變,這很脆弱。

b)手動重寫方法。這基本上消除了首先從數據庫生成模型的好處。

有誰知道是否有更好的解決方案來解決這個問題?

謝謝。

+0

您可以隨時通過屬性窗口爲實體屬性設置默認值。對您無幫助。 –

+0

這仍然會讓我手動輸入一個默認值 - 如果proc的默認值在那裏改變了,那麼將無法自動保持與模型同步。 – MgSam

+1

你能寫出爲你提供服務器默認值的proc嗎? –

回答

6

截至2013年1月,沒有支持的方法可以讓Entity Framework執行此操作。

我已經打開了功能請求here

+0

也許你已經知道了,但是..由於遷移,他們已經關閉了你的門票,它應該在github社區重新開放,如果你想再次考慮它https://github.com/aspnet/EntityFramework6/問題 – Sycraw

3

這裏是一個hacky的解決方法。我不知道EF中是否有支持可選參數的功能,但您可以嘗試模擬它 - 如果您願意更改存儲過程。

您可以將存儲過程的定義中的默認值更改爲NULL,然後在過程的主體中用所需的默認值替換NULL參數。然後從使用EF的代碼中,您可以通過null來指示使用默認值。這樣至少默認只在SP本身中定義。缺點包括當然現在NULL變成了「帶外」值,這意味着如果這是您所需要的,您實際上不會將它傳遞給SP(除了必須更改SP並確保所有將來的SP使用這個奇怪的約定)

+0

是的,我實際上提出了這樣做,但它會給我們帶來其他複雜因素,所以不幸的是它不是一種選擇。 – MgSam

相關問題