使用实体框架TPH模式访问数据库中基类查询中扩展类的属性
本文关键字:查询 基类 扩展 属性 数据库 实体 框架 TPH 访问 模式 | 更新日期: 2023-09-27 18:03:14
问题的标题可能不是不言自明的。
我有ASP。. NET MVC5项目与实体框架我首先使用代码,并为实体实现了TPH模式。
有一个基本的请求实体(我已经删除了大部分字段,这只是一个例子)。
public class Request
{
public int Id { get; set; }
public string Title { get; set; }
}
也有一些模型有专属属性来扩展它:
public class RequestQuestion : Request
{
public string Question { get; set; }
public string Answer { get; set; }
}
public class RequestForWork : Request
{
public string WorkName { get; set; }
}
每一个都被添加到EntityContext:
public DbSet<Request> Requests { get; set; }
public DbSet<RequestQuestion> RequestQuestions { get; set; }
public DbSet<RequestForWork> RequestForWorks { get; set; }
当我创建一些请求时,我像这样添加它们:
var db = new EntityContext();
var requestQuestion = new RequestQuestion{ some initialization };
this.db.Requests.Add(requestQuestion);
this.db.SaveChanges();
问题来了。当我查询用户
的请求时var requests = this.db.Students.Find(userId).Requests.ToList();
在调试中,我可以通过基类访问每个请求的扩展类的属性。有没有一种方法能让类的类型扩展选定的实体并访问它的属性?
当前要构建所有请求的列表并填充一些视图模型的数据,我需要分别选择每种类型的请求,并从这些单独的选择中填充一个全局列表。
您需要将基类型强制转换为它的子类型并测试null
foreach (r in requests)
{
var rq = r as RequestQuestion;
if(rq != null)
{
string rq = rq.Question
}
var rfw = r as RequestForWork;
if(rfw != null)
{
string wn = rfw.WorkName;
}
}