EF Core - Включить интерфейс ThenInclude - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь загрузить связанные данные, используя .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)

Что не работает, так как это не просто выражение свойства.

Я пытался найти похожие случаи, но не смог их найти. Я что-то упускаю или это просто невозможно, и я пытаюсь сделать то, что вы обычно не должны делать?

Даже если не следует, как бы вы этого достигли?

1 Ответ

0 голосов
/ 15 мая 2018

Невозможно включить производное в EntityFramework Core 2.0 или более раннюю версию.

Существует проблема с GitHub Запрос: поддержка Include / ThenInclude для навигации по производному типу , запрашивающему эту функцию, которая была добавлена ​​в EntityFramework Core 2.1-preview1.

Согласно документации 2.1 и Что нового в 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/

Сегодня мы рады сообщить, что первый кандидат на выпуск EF Core 2.1 доступен, наряду с .NET Core 2.1 RC 1 и ASP.NET Core 2.1 RC 1, для широкого тестирования, а теперь и для производства используйте !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...