Использование преимуществ структуры «многие ко многим» в Entity Framework, когда в присоединяемой таблице есть дополнительное поле - PullRequest
1 голос
/ 01 декабря 2010

Сценарий:

В моей базе данных есть таблица, объединяющая Клиентов и Фильмы, с дополнительным полем, определяющим вес отношения. EG:

CustomersMovies
  | -CustomerID
  | -MovieID
  | -Weight 

Если бы у меня были только первые два поля, Entity Framework распознавал бы отношение «многие ко многим», и я мог бы вызывать Customer.Movies и Movie.Customers. С третьим полем эта связь нарушена.

В идеале, я бы хотел иметь возможность использовать Customer.Movies [0] .Weight или что-то подобное для возврата параметра соединения. Даже если это не поддерживается, мне все равно хотелось бы, чтобы отношение «многие ко многим» для других функций.

Поддерживается ли что-нибудь подобное в Entity Framework? Я почти собираюсь создать две таблицы CustomersMovies (которая просто объединяет две таблицы) и таблицу CustomerMovieWeights, в которой указывается вес для конкретного клиента и фильма, но избыточные данные не идеальны.

С уважением, Гарри

1 Ответ

0 голосов
/ 01 декабря 2010

Если вы удалили столбец Вес из соединительной таблицы, то вам потребуется только сопоставить таблицу Клиенты и Фильмы .

Если нет, вам необходимо сопоставить все три таблицы: Customer , CustomerMovies и Фильмы .

Но, конечно, вы не сможете сделать это:

var customer = ctx.Customers.First();
var customerMovies = customer.Movies;

Вам нужно будет сделать это:

var customer = ctx.Customers.First();
var customerMovies = customer.CustomerMovies.Movies;

Поскольку Клиент не будет иметь прямого навигационного свойства для Фильм - он будет иметь навигационное свойство для CustomerMovie (и наоборот).

Честно говоря, я бы пошел с вашей последней идеей. Пусть таблица CustomerMovies содержит только FK (CustomerId, MovieId) и другую таблицу мета-данных для весов.

Таким образом, вы можете правильно отобразить ваши многие ко многим в EDMX.

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