gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:20 25 4
gpt4 key购买 nike

可能问题的标题不是不言自明的。

我有一个带有 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 模型,我需要单独选择每种类型的请求并从这些单独的选择中填充全局列表。

最佳答案

您需要将基类型转换为其子类型并测试是否为空

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com