2009-12-04 49 views
0

我剛剛閱讀this nice article教我如何使用繼承(Table-per-hirarchy)。表中繼承不可空字段 - EDM

我想知道,說我有一個'HireDate'列需要在子類中使用。 這是肯定的,在數據​​庫它必須標記爲可空,但我怎麼能在EDM中標記它不可空? 我試圖將它設置爲不可空,但它說它需要一個默認值,並且我希望默認值爲DateTime.Now,而不是一個常量值。

+0

爲什麼不使用表每類? 「你不需要」重新發明自行車。 – Restuta 2009-12-04 09:59:39

+1

不要對EF使用絕對不推薦的table-per-class ...請參閱http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an- inheritance-strategy.aspx – 2009-12-04 10:41:45

+0

對不起,我的意思是每種類型的表。 – Restuta 2009-12-04 13:37:44

回答

0

如果某個屬性(如HireData)在派生類型上聲明,並且您正在使用TPH,則應儘可能在EDM中將其標記爲不可空,儘管它在數據庫中可爲空。

其實這個能力是TPH的特徵之一。

...

所以,我看着有問題的博客文章,並注意到它有一個問題,因爲它暴露了鑑別列(PersonCategory)作爲基實體的屬性,如果允許的話會使類型的實體可變,因爲你可以很容易做到這一點:

student.PersonCategory = 2; 

這將使學生成爲管理員!這不是EF允許的。

所以,如果你仔細追蹤這個例子,那很可能是你的問題。

包含鑑別符的列不應該映射到EDM中的屬性,它只能用於映射(即映射窗口中「映射到XXX」下的'添加條件')。

解決博客文章中的問題:從Person類中刪除PersonCategory屬性。

無論如何,我希望這有助於

亞歷