实体框架6的SQL Server TPT继承 - 数据库优先

时间:2016-02-18 11:44:00

标签: c# asp.net sql-server entity-framework inheritance

我首先使用EF6和数据库进行ASP.NET MVC项目。

我有一张桌子:正在使用的“调​​查”。现在,我需要一种新型的调查,需要“调查”的所有领域和一些新的特定领域。

为此,我考虑过使用继承。所以我创建了一个新表“CourseSurvey”,它有一个主键,也是一个外键,引用了“Survey”的主键和一些其他非可空字段。

这似乎工作正常。

当我需要检查“Survey”中的一行是“Survey”或“CourseSurvey”的实例时,我会这样做:

var survey = unitOfWork.SurveyRepository.FindSingleBy(m => m.SurveyId == viewModel.SurveyId) as CourseSurvey;

if(survey != null) {
   // then is a child
}

这是一个好习惯吗?

另外,是否可以将“Survey”的实例转换为“CourseSurvey”?如果是这样,我该怎么做?

最后,我在这里做正确的事,还是有更好的设计方法?我可以将“CourseSurvey”列放入“Survey”并允许它们可以为空,但我不想用未使用的列污染“Survey”......

我现在开始使用这个概念,我仍然觉得我没有完全理解它。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您应该使用TPH,即使记住您将拥有对于层次结构中的具体类特殊的列。 EF将创建“Discriminator”列,您可以使用Fetch(m => m is CourseSurvey)

之类的内容
相关问题