繁体   English   中英

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

[英]SQL Server TPT Inheritance with Entity Framework 6 - DB First

我有一个首先使用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
}

这是个好习惯吗?

另外,是否可以将“调查”的实例转换为“课程调查”? 如果是这样,我该怎么办?

最后,我在这里做对了还是有更好的设计方法? 我可以将“ CourseSurvey”列放入“ Survey”中,并使其可以为空,但是我不想用未使用的列来污染“ Survey” ...

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

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM