У меня есть модель данных, в которой люди могут быть назначены для выполнения задач и задач.Модель выглядит в основном так:
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, который возвращает уже существующую сущность.