2017-01-16 160 views
2

在實體框架中,默認值約束功能尚未實現,我自己試了一下,然後讀了一下here。所以,我想知道得到這個的最好方法是什麼。我應該使用存儲過程還是觸發類似的東西?在Entity Framework中哪些更好或者新增了什麼,因爲我不想在代碼中明確地處理它。 這將是一個很大的幫助。實體框架和默認值

+0

我一直只是把默認值在實體的初始化。我知道這是你想避免的,但它的工作原理。 –

+0

在我的情況下,我的實體框架得到更新更頻繁,我有一些表,所以我通常避免在這些生成的代碼文件中進行任何更改。 –

+0

我不確定你是如何生成你的實體pocos的(基於你的評論上面,它聽起來像你在做數據庫第一)但大多數工具可以選擇爲你的實體創建部分類。然後,您可以創建部分類來執行實例實例化時需要執行的任何自定義邏輯。 Simon Hughes創建了一個工作得很好的工具 - https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator –

回答

3

在數據庫第一種方法中,實體框架忽略默認值約束。但實體框架顯示列的默認值屬性。在Model.edmx查看器中,選擇一個實體 - >轉到列 - >屬性 - >默認值。添加列中的默認值,就是這樣。

在我的情況下,我通過代碼更新了Model.edmx文件。代碼從Db獲取默認約束,然後更新Model.edmx文件中的概念模型,因爲我有大量的默認值列。

默認值約束問題仍然存在,在實體框架,直到EF6的所有版本,似乎在實體框架來解決7

+0

看起來你已經做了一些研究工作。豎起大拇指。 –

+0

@Wasim,你說過「通過代碼更新Model.edmx文件」。你是怎麼做到的? – Thomas

+0

@Thomas,在我的情況下,數據庫不夠大,無法編寫代碼腳本,所以我手動完成。 –

0

作爲解決辦法,我認爲您可以使用數據庫觸發器將列值更新爲默認值。

+0

謝謝@Behzad,我很欣賞你的建議。 –

+0

如果我無法從代碼方得到解決方案,我一定會去這個選項。 –

3

最簡單的方法是從C#初始化您的屬性,從而確保默認值。

對於數據庫首先,設計器忽略你的SQL默認值,你必須告訴它將你的列視爲計算:選擇你的實體 - >去列 - >屬性 - >設置StoreGeneratedPattern爲Computed(默認爲None)

+0

我試過了,它工作。謝啦! –

+0

只想問一下,是否有任何方法可以爲所有列設置此屬性,因爲當有多個表時它將會有所幫助。 –

+0

@ user7369792 - 檢查[這個問題](http://stackoverflow.com/questions/12691854/setting-default-value-in-entity-framework-database-first) – Alexei