Entity Framework также необходим совет Linq - PullRequest
0 голосов
/ 01 октября 2011

у меня на БД 3 таблицы movies, workers, workermovies (это таблица отношений)

public class Movie
{
    public Movie()
    {
        Genres = new List<Genre>();
        Formats = new List<Format>();
        ProductionCompanies = new List<ProductionCompany>();
        Workers = new List<Worker>();
    }

    public int Id { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
    public string StoryLine { get; set; }
    public int RunTime { get; set; }

    [ForeignKey("MPAARateId")]
    public MPAARate MPAARate { get; set; }
    public int MPAARateId { get; set; }

    public byte[] ImageData { get; set; }
    public string ImageMimeType { get; set; }
    public DateTime CreatedDate { get; set; }
    public string OfficialSite { get; set; }
    public int Budget { get; set; }
    public int StatusId { get; set; }

    public virtual ICollection<Genre> Genres { get; set; }
    public virtual ICollection<Format> Formats { get; set; }
    public virtual ICollection<ProductionCompany> ProductionCompanies { get; set; }
    public virtual ICollection<Worker> Workers { get; set; }
}


public class Worker
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public DateTime Birthday { get; set; } 
    public string Biography { get; set; } 
    public string BornName { get; set; } 
    public double Height { get; set; } 
    public DateTime? Died { get; set; } 
    public byte[] ImageData { get; set; } 
    public string ImageMimeType { get; set; } 
    public bool IsActor { get; set; }
    public bool IsDirector { get; set; } 
    public bool IsWriter { get; set; } 
    public bool IsProducer { get; set; }
    public bool IsStar { get; set; }

    public virtual ICollection<Movie> Movies { get; set; }
}

в этом отношении я получил movieId и workerId но я также получил еще несколько полей, если человек действовал или писал или продюсер и т.д.

как определить класс relation entity при необходимости
и когда я хочу получить только список людей, которые действовали в фильме, как я написал такую ​​ссылку запрос

1 Ответ

0 голосов
/ 02 октября 2011

Вам необходимо ввести в вашу модель дополнительную сущность 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();

Вот еще один ответ на очень похожий вопрос с множеством примеров возможных запросов: Сначала создайте код, многие ко многим, с дополнительными полями в таблице ассоциации

...