问题标题可能不言自明。
我有一个使用 Entity Framework 6 的 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();
在调试中,我可以通过基础访问每个请求的扩展类的属性。那么,有没有办法以某种方式获取扩展所选实体的类类型并访问其属性?
目前,为了构建所有请求的列表并用数据填充一些 View 模型,我需要单独选择每种类型的请求并从这些单独的选择中填充全局列表。
最佳答案
您需要将基类型转换为其子类型并测试 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;
}
}
关于c# - 使用 Entity Framework TPH 模式从数据库访问基类查询中扩展类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656279/