Я пытаюсь загрузить связанные данные, используя .Include().ThenInclude()
. Я использую наследование, и мои классы, производные от базового класса 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
и ApprovingUser
для всех TicketEntries, реализующих Интерфейс IApprovable
.
Я пытался сделать это:
_context.Ticket
.Include(t => t.TicketEntries)
.ThenInclude(te => te.User)
.Include(t => t.TicketEntries as ICollection<IApprovable>)
.ThenInclude(ia => ia.ApprovingUser)
Что не работает, так как это не просто выражение свойства.
Я пытался найти похожие случаи, но не смог их найти. Я что-то упускаю или это просто невозможно, и я пытаюсь сделать то, что вы обычно не должны делать?
Даже если не следует, как бы вы этого достигли?