1

Un scénario:Profitant du grand nombre à plusieurs relations de Entity Framework lorsque la table se joindre a un champ supplémentaire

Dans ma base de données J'ai une table de rejoindre les clients et les films ensemble, avec un champ supplémentaire spécifiant le poids de la relation. EG:

CustomersMovies 
    | -CustomerID 
    | -MovieID 
    | -Weight 

Si je ne les avais deux premiers champs, Entity Framework reconnaîtra les nombreux à-plusieurs et je serais en mesure d'appeler Customer.Movies et Movie.Customers. Avec le troisième champ, cette relation est rompue.

Idéalement, j'aimerais pouvoir aller Customer.Movies [0] .Weight ou quelque chose de similaire pour retourner le paramètre de jointure. Même si cela n'est pas supporté, j'aimerais toujours la relation many-to-many pour d'autres fonctions.

Est-ce que quelque chose comme ceci est supporté dans Entity Framework? Je suis presque sur le point de créer deux tables, CustomersMovies (qui vient de rejoindre les deux tables) et une table CustomerMovieWeights qui spécifie le poids pour un client et un film donné, mais les données redondantes ne sont pas idéales.

Cordialement, Harry

+0

Non pris en charge, vous devez soit exclure le membre Weight du modèle, soit utiliser deux tables, soit mapper deux fois la même table dans le modèle. – KristoferA

Répondre

0

Si vous laissé tomber le poids colonne de la table de jonction, alors vous ne devez mapper Les clients et Films tableau.

Sinon, vous aurez besoin de retrouver tous les trois tableaux: Client, CustomerMovies et Films.

Mais bien sûr, vous ne serez pas en mesure de le faire:

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

Vous devez faire ceci:

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

Parce que Client aura pas une propriété de navigation directe à Film - il aura une propriété de navigation à CustomerMovie (et vice versa).

Honnêtement, je voudrais aller avec votre dernière idée. Le tableau CustomerMovies contient uniquement les FK (CustomerId, MovieId) et une autre table de type "méta-données" pour les poids.

De cette façon, vous pouvez mapper correctement votre many-to-many dans l'EDMX.

+0

Je n'ai pas beaucoup de succès, mais est-il possible de créer une vue qui est juste SELECT CustomerID, MovieID de CustomersMovies, puis l'ajouter dans le modèle? Parce que la vue n'a évidemment pas de clés étrangères, elle ne joue pas bien. – Harry

+0

oui, c'est possible (je pense), mais alors vous ne pourrez pas effectuer les opérations UPDATE sur l'entité "CustomerMovies", car une vue est en lecture seule (par exemple vous ne pouvez pas faire UPDATE vwCustomerMovies - ou pouvez-vous ? – RPM1984

Questions connexes