Вам необходимо ввести в вашу модель дополнительную сущность WorkerMovie
и преобразовать отношение «многие ко многим» между Worker
и Movie
в два отношения «один ко многим» - одно между Worker
и * 1005. * и другие между Movie
и WorkerMovie
. Эскиз:
public class WorkerMovie
{
[Key, Column(Order = 0)]
public int WorkerId { get; set; }
[Key, Column(Order = 1)]
public int MovieId { get; set; }
public Worker Worker { get; set; }
public Movie Movie { get; set; }
public bool WorkedAsActor { get; set; }
public bool WorkedAsWriter { get; set; }
public bool WorkedAsProducer { get; set; }
// etc.
}
public class Movie
{
// ...
public virtual ICollection<WorkerMovie> WorkerMovies { get; set; }
// remove ICollection<Worker> Workers
}
public class Worker
{
// ...
public virtual ICollection<WorkerMovie> WorkerMovies { get; set; }
// remove ICollection<Movie> Movies
}
Если вы хотите найти рабочих, которые были актерами в определенном фильме с movieId
, вы можете написать:
var workersAsActors = context.WorkerMovies
.Where(wm => wm.MovieId == movieId && wm.WorkedAsActor)
.Select(wm => wm.Worker)
.ToList();
Вот еще один ответ на очень похожий вопрос с множеством примеров возможных запросов: Сначала создайте код, многие ко многим, с дополнительными полями в таблице ассоциации