c# - 使用 Entity Framework TPH 模式从数据库访问基类查询中扩展类的属性

标签 c# asp.net-mvc entity-framework

问题标题可能不言自明。

我有一个使用 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/

相关文章:

entity-framework - 如何在 Entity Framework 数据库第一种方法中用具有相同键的另一个实体替换实体?

c# - 具有并行任务时检测网页的最佳实践

c# - 使用Caliburn Micro在WPF中更新DataGrid

c# - 从表达式树中提取所有可能的路径并评估它们是否成立

c# - DataGridView 性能与 BindingList 数据源相结合

wcf - Entity Framework 和使用 WCF 服务

javascript - 在 asp.net-mvc 中使用 jquery 查找兄弟输入值

asp.net-mvc - 以编程方式获取 Controller 操作(url)的路由

c# - MVC - 清除 SelectList 的默认选定值

sql-server - 字符串或二进制数据将被截断。该语句已终止。 System.Data.SqlClient.SqlException (0x80131904)