2009-12-04 44 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属性。

无论如何,我希望这有助于

亚历