Запрос свойства навигации из представления с помощью Entity Framework Core - PullRequest
0 голосов
/ 16 октября 2018

У меня есть модель данных, в которой люди могут быть назначены для выполнения задач и задач.Модель выглядит в основном так:

class Task {
    public int Id {get;set;}
    public string Description {get;set;}
    public virtual ICollection<TaskAssignment> TaskHistory { get; set; }
}
class Person {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<TaskAssignment> TaskHistory { get; set; }    
}
class TaskAssignment {
    public int TaskId {get;set;}
    public Task Task {get;set;}

    public int PersonId {get;set;}
    public Person Person {get;set;}

    public DateTime AssignedAt { get; set; }
    public DateTime? UnassignedAt { get; set; }
}

Поскольку человеку можно назначать и не назначать человека, а задание всегда может иметь список «текущих» назначений (обратите внимание на обнуляемое значение UnassignedAt).То, что я хотел бы сделать, это добавить свойство навигации в мои модели, которые содержат только «активные» назначения (where UnassignedAt == null).

Для этого я подумал о добавлении представления базы данных «CurrentTaskAssignments», где явыполнить фильтрацию по строкам, имеющим UnassignedAt unset.Если я расширю свои модели следующим образом:

class Task {
    public virtual ICollection<TaskAssignment> CurrentAssignments { get; set; }
}
class Person {
    public virtual ICollection<TaskAssignment> CurrentAssignments { get; set; }
}

Могу ли я заставить Entity Framework Core каким-то образом выполнять запросы для этих свойств навигации в представлении?Запросы будут выглядеть так:

// query tasks including the current assigned 
db.Tasks.Include( t => t.CurrentAssignments ); // join on view
// query tasks including the whole history
db.Tasks.Include( t => t.TaskHistory); // join on normal table
// query the currently assigned persons for a task
db.Tasks.Where(t=>t.Id == 3).SelectMany( t => t.CurrentAssignments.Person ); // join on view with join to person 

В конечном итоге это будет показано через OData API.Вот почему я хотел бы полностью реализовать это на уровне EF, перерабатывая существующие объекты для использования возможностей расширения и фильтрации объектов.

Я видел, что в качестве функции доступны Типы запросов, но я хотел бы предотвратить определение нового дублирующего класса Entity для View, который возвращает уже существующую сущность.

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