EF Core - 包含 ThenInclude 接口
EF Core - Include ThenInclude Interface
我正在尝试使用 .Include().ThenInclude()
加载相关数据。我正在使用继承,我的 class 派生自基础 class TicketEntry
可以实现一个接口 IApprovable
:
public class Ticket
{
[Key]
public int Id { get; set; }
[Required]
public string Title { get; set; }
public ICollection<TicketEntry> TicketEntries { get; set; }
}
public abstract class TicketEntry
{
[Key]
public int Id { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreationDate { get; set; }
[Required]
public string UserId { get; set; }
[ForeignKey("UserId")]
public ApplicationUser User { get; set; }
public int TicketId { get; set; }
[ForeignKey("TicketId")]
public Ticket Ticket { get; set; }
}
public class Common : TicketEntry
{
[Required]
public string Description { get; set; }
}
public class CostEstimate : TicketEntry, IApprovable
{
[Required]
[Column(TypeName = "money")]
public decimal Estimate { get; set; }
public Boolean? Approved { get; set; }
public string ApprovingUserId { get; set; }
[ForeignKey("ApprovingUserId")]
public ApplicationUser ApprovingUser { get; set; }
}
现在我想获得一个 Ticket
及其所有 TicketEntries 及其 User
和实现接口 IApprovable
.[=19 的所有 TicketEntries 的 ApprovingUser
=]
我试过这样做:
_context.Ticket
.Include(t => t.TicketEntries)
.ThenInclude(te => te.User)
.Include(t => t.TicketEntries as ICollection<IApprovable>)
.ThenInclude(ia => ia.ApprovingUser)
这不起作用,因为它不是纯 属性 表达式。
我试图查找类似的案例,但没有找到。我是不是遗漏了什么或者根本不可能,我正在尝试做一些你通常不应该做的事情?
即使不应该,您将如何完成?
无法在 EntityFramework Core 2.0 或更早版本中包含派生。
有一个 GitHub 问题 Query: Support Include/ThenInclude for navigation on derived type 请求此功能,该功能已添加到 EntityFramework Core 2.1-preview1。
根据 2.1 documentation and What's new in 2.1,您可以通过以下语法之一使用它:
var option1 = context.People.Include(p => ((Student)p).School);
var option2 = context.People.Include(p => (p as Student).School);
var option3 = context.People.Include("School");
更新:构建 2018 公告和生产就绪
https://blogs.msdn.microsoft.com/dotnet/2018/05/07/announcing-entity-framework-core-2-1-rc-1/
Today, we are excited to announce that the first release candidate of EF Core 2.1 is available, alongside .NET Core 2.1 RC 1 and ASP.NET Core 2.1 RC 1, for broad testing, and now also for production use!
我正在尝试使用 .Include().ThenInclude()
加载相关数据。我正在使用继承,我的 class 派生自基础 class TicketEntry
可以实现一个接口 IApprovable
:
public class Ticket
{
[Key]
public int Id { get; set; }
[Required]
public string Title { get; set; }
public ICollection<TicketEntry> TicketEntries { get; set; }
}
public abstract class TicketEntry
{
[Key]
public int Id { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreationDate { get; set; }
[Required]
public string UserId { get; set; }
[ForeignKey("UserId")]
public ApplicationUser User { get; set; }
public int TicketId { get; set; }
[ForeignKey("TicketId")]
public Ticket Ticket { get; set; }
}
public class Common : TicketEntry
{
[Required]
public string Description { get; set; }
}
public class CostEstimate : TicketEntry, IApprovable
{
[Required]
[Column(TypeName = "money")]
public decimal Estimate { get; set; }
public Boolean? Approved { get; set; }
public string ApprovingUserId { get; set; }
[ForeignKey("ApprovingUserId")]
public ApplicationUser ApprovingUser { get; set; }
}
现在我想获得一个 Ticket
及其所有 TicketEntries 及其 User
和实现接口 IApprovable
.[=19 的所有 TicketEntries 的 ApprovingUser
=]
我试过这样做:
_context.Ticket
.Include(t => t.TicketEntries)
.ThenInclude(te => te.User)
.Include(t => t.TicketEntries as ICollection<IApprovable>)
.ThenInclude(ia => ia.ApprovingUser)
这不起作用,因为它不是纯 属性 表达式。
我试图查找类似的案例,但没有找到。我是不是遗漏了什么或者根本不可能,我正在尝试做一些你通常不应该做的事情?
即使不应该,您将如何完成?
无法在 EntityFramework Core 2.0 或更早版本中包含派生。
有一个 GitHub 问题 Query: Support Include/ThenInclude for navigation on derived type 请求此功能,该功能已添加到 EntityFramework Core 2.1-preview1。
根据 2.1 documentation and What's new in 2.1,您可以通过以下语法之一使用它:
var option1 = context.People.Include(p => ((Student)p).School);
var option2 = context.People.Include(p => (p as Student).School);
var option3 = context.People.Include("School");
更新:构建 2018 公告和生产就绪
https://blogs.msdn.microsoft.com/dotnet/2018/05/07/announcing-entity-framework-core-2-1-rc-1/
Today, we are excited to announce that the first release candidate of EF Core 2.1 is available, alongside .NET Core 2.1 RC 1 and ASP.NET Core 2.1 RC 1, for broad testing, and now also for production use!