2012-03-10 6 views
0

J'ai un locataire de classe, qui lie à un utilisateur via une table TenantUser dans la base de données. Cette relation est beaucoup => beaucoup, bien que je veux seulement exposer la cartographie d'une manière.Fluent Code First EF 4.3

locataire a une propriété

virtual ICollection<User> Users { get; set; } 

La classe utilisateur n'a pas de mappage de propriété en arrière.

Est-il possible d'utiliser des propriétés ou l'API fluide pour mapper la propriété Users du locataire afin qu'il collecte les utilisateurs pour un locataire particulier via la table TenantUser.

Est-ce possible, ou est-ce que la classe User a besoin d'une collection de locataire pour spécifier un type de mappage?

Je vais aussi (le cas échéant) un dans le contexte

DbSet<TenantUser> 

pour gérer la table intermédiaire, mais pour des raisons pratiques, je veux la propriété accessible à la classe des locataires.

Merci.

Répondre

4

Vous pouvez définir un nombre à plusieurs API dans la cartographie Fluent, même si une seule collection est exposée dans les classes de modèle:

modelBuilder.Entity<Tenant>() 
    .HasMany(t => t.Users) 
    .WithMany() 
    .Map(x => 
    { 
     x.MapLeftKey("TenantId"); 
     x.MapRightKey("UserId"); 
     x.ToTable("TenantUser"); 
    }); 

Vous ne pouvez pas définir cette relation avec les annotations de données. Sachez que vous n'avez pas d'entité TenantUser dans une relation plusieurs-à-plusieurs dans Entity Framework. Vous ne pouvez donc pas créer un DbSet<TenantUser> dans votre contexte pour gérer la table des liens. EF gère cette table en interne lorsque vous ajoutez ou supprimez des relations en ajoutant et en supprimant des éléments de/à la collection Tenant.Users.

+0

Désolé, cela a pris tellement de temps, je n'ai pas pu tester pendant quelques jours. Bonne réponse merci. Il ne m'est pas venu à l'esprit que WithMany() pouvait être spécifié sans arguments. Y a-t-il une bonne documentation quelque part pour cette API fluide? – Jim

+0

@Jim: Intellisense :) Honnêtement, j'ai compris les choses seulement en expérimentant, googler et regarder quelles méthodes sont disponibles dans Intellisense, et ainsi de suite. Le document officiel, je pense, est le suivant: http://msdn.microsoft.com/en-us/library/hh295844%28v=vs.103%29.aspx Mais je ne l'ai jamais lu. – Slauma

Questions connexes