Как включить свойство таблицы для каждой иерархии в быструю загрузку ядра efC#

Место общения программистов C#
Ответить
Anonymous
 Как включить свойство таблицы для каждой иерархии в быструю загрузку ядра ef

Сообщение Anonymous »

Рассмотрим следующую модель:

Код: Выделить всё

public abstract class A
{
public enum T { B_, C_, D_ }
public int Id { get; set; }
public int? ParentId { get; set; }
public A? Parent { get; set; }
public virtual ICollection Children { get; set; } = []; // an B has Cs and a C has Ds as children
public virtual ICollection Es { get; set; } = [];
}

public class B
: A
{
}

public class C
: A
{
}

public class D
: A
{
public virtual ICollection Fs { get; set; } = [];
}

public class E
{
}

public class F
{
}
Мой вопрос: как мне включить все в один запрос B, используя быструю загрузку и свободный синтаксис, поэтому в основном я хочу сделать что-то вроде следующего (что терпит неудачу из-за выдачи исключения в последнем thenInclude):

Код: Выделить всё

private IQueriable Bs => _dbContext.Bs
.Include(b => b.Children)
.Include(b => b.Es)
.ThenInclude(c => c.Children)
// how to include c.Es ?
.ThenInclude(d => (d as D).Fs)
// and how to I include d.Es ?
Я пробовал приводить C.Children с помощью linq Cast() или фильтровать с помощью OfType(), но сообщение об исключении (которое затем выдается) сообщает мне, что есть только Where, OrderBy и thenBy доступно, и приведение должно выполняться с использованием оператора as или явного приведения, ни один из них не работает в показанном примере.

Подробнее здесь: https://stackoverflow.com/questions/785 ... er-loading
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»