2010-06-21 81 views
6

我使用實體框架4.0實體框架4.0使用數據庫默認值

我們的許多表有一個名爲ROWID列,使用由DBA跟蹤的東西。該列是不可空的,具有映射到函數的數據庫默認值。

問題是,EDMX模型要求這個屬性在實體上有一個值,使對象的構建變得困難。

我已經閱讀了很多關於手動調整EDMX和SSDL文件的文章,以使這項工作。這對我們的團隊來說是不可行的。

除了在數據庫中設置NULLABLE之外,還有更好的解決方案嗎?我不在乎如何獲取價值,我只是希望數據庫能夠自行設置。

回答

2

如果RowID永遠不需要在應用程序的上下文中讀取或寫入,那麼它根本不屬於您的實體模型。 只需使用設計器(右鍵單擊>刪除)從您的實體模型中刪除它並讓數據庫管理它。

+0

的問題是ROWID是在其它表FK,所以我需要能夠得到它,創造子實體時使用它。 – ctorx 2010-06-22 19:24:44

6

您應該直接在SSDL(模型後面的XML)中設置StoreGeneratedPattern =「Computed」。

1 - 右鍵單擊​​Model

2 - 選擇 「打開」=> XML編輯器

3 - 查找表中的一個的映射根據示範內容部分

4 - 將StoreGeneratedPattern =「Computed」屬性添加到R​​owID列

5 - 對文件執行全局替換,以便每個表都具有StoreGeneratedPattern =「Computed」的RowID定義

注: 如果使用更新模型嚮導,您將需要再次手動更新XML。我的建議是:不要使用嚮導或將原始和更改的xml行保存到單獨的文本文件中,以便在運行嚮導後讓它們可用於執行全局替換。

欲瞭解更多信息,請參閱這篇文章: http://msdn.microsoft.com/en-us/library/dd296755(v=vs.90).aspx

+1

我正在使用實體框架5,並且當我設置StoreGeneratedPattern = Computed然後使用「從數據庫更新模型...」嚮導時,該字段是* not * reset。 – DaveD 2012-11-27 19:39:11