SQL Server TPT Inheritance with Entity Framework 6 - DB Firs

本文关键字:DB Firs Framework Entity Server TPT Inheritance with SQL | 更新日期: 2023-09-27 18:35:21

我有一个 ASP.NET 的MVC项目,首先是EF6和数据库。

我有一个表格:"调查"正在使用。现在,我需要一种新型的调查,需要"调查"的所有字段和一些新的特定字段。

为此,我考虑使用继承。因此,我创建了一个新表"CourseSurvey",该表具有一个主键,该主键也是引用"Survey"的主键和其他一些不可为空字段的外键。

这似乎工作正常。

当我需要检查"调查"中的一行是"调查"还是"课程调查"的实例时,我会这样做:

var survey = unitOfWork.SurveyRepository.FindSingleBy(m => m.SurveyId == viewModel.SurveyId) as CourseSurvey;
if(survey != null) {
   // then is a child
}

这是一种好的做法吗?

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

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

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

谢谢!

SQL Server TPT Inheritance with Entity Framework 6 - DB Firs

我认为你应该使用 TPH,即使记住你会有列,这些列对于层次结构中的具体类是特殊的。EF 将创建"鉴别器"列,您将能够使用类似 Fetch(m => m is CourseSurvey)