1

我想將兩個具體實體類型和抽象基類型映射到同一個數據庫表。對實體框架4中的未映射位列使用DB默認值(數據庫優先)

該表包含一個不接受空值的位列。列有一個默認值:((0))。

只有兩個具體實體類型(即具體類型1)中的一個需要使用該列的值(對於另一個(即具體類型2),它總是爲false)。

我嘗試添加映射到該列的屬性只需要它 和

當我打電話的SaveChanges我得到一個UpdateException,在其最內側的異常以下消息的實體類型:
「的列不能包含空值[列名= MY_BIT_COLUMN,表名稱= MY_TABLE]。」

我已經編輯的EDMX的SSDL部和改變:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" /> 

到:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" DefaultValue="false" /> 

(如果沒有這個變化映射失敗 - 將無法運行)

有什麼辦法來解決這個問題而無需添加映射到該列的屬性到第二混凝土實體鍵入或將其移動到基本類型?

將受保護的屬性添加到具體類型2中的確行得通,但我更喜歡更優雅的解決方法。

+0

所以一旦你添加DefaultValue到SSDL它仍然會拋出異常? – 2011-05-03 20:03:52

+0

是的,它編譯,但在運行時失敗。 – 2011-05-03 22:23:03

回答

1

如果你的解決方法不起作用(我有點驚訝,但是現在對我來說現在測試就遲到了),那麼唯一的解決方法就是將你的繼承從TPH改爲TPT或TPC。顯然問題在於TPH要求派生類型中的所有列都是可空的。

其他解決方法是讓您的父實體的列成員和派生實體中使用自定義構造函數,它將始終將其設置爲false。

最後一個解決方法是讓列可以爲空並在第一個實體的業務邏輯中執行驗證。

+0

我無法打破任何現有的表格。在這種情況下,我會堅持一個受保護的屬性,以隱藏用戶的多餘財產。 – 2011-05-03 22:55:19

相關問題