我首先使用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”......
我现在开始使用这个概念,我仍然觉得我没有完全理解它。
谢谢!
答案 0 :(得分:0)
我认为您应该使用TPH,即使记住您将拥有对于层次结构中的具体类特殊的列。 EF将创建“Discriminator”列,您可以使用Fetch(m => m is CourseSurvey)