Comment puis-je carte à une table à l'aide de Entity Framework Code First avec API Fluent
Je suis nouveau sur asp.net mvc et entity framework code first apporach, je ne suis pas vif sur les bases de données. Je m'excuse à l'avance pour une terminologie ou de la façon dont je comprends les choses.
Maintenant à la question. J'ai les modèles suivants:
Utilisateur Modèle
public class User
{
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public int RoleId { get; set; }
[ForeignKey("RoleId")]
public virtual IEnumerable<Role> Roles { get; set; }
}
Modèle
public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
Ce que je veut est une façon d'utiliser Ef codefirst approche avec l'API fluent à la carte le nom d'utilisateur et RoleId à un User_Role table avec un un-à-plusieurs relation, un utilisateur peut avoir plusieurs rôles:
Je suppose que ce qui à fait dans cette question approche est la bonne, sauf que là, l'auteur a utilisé un grand nombre de connexion. J'ai essayé de cette façon, mais la partie avec u => u.les utilisateurs me donne une erreur(je suppose que c'est parce que il n'y a pas d'utilisateurs de la propriété dans le modèle, alors il répondit à sa question, mais n'a pas de mise à jour de sa question?)
Ma question: Quelle est l'exacte couramment le code de l'api de laisser Ef générer ce tableau pour moi?
Choses que je ne suis pas sûr au sujet de: (n'hésitez pas à ignorer)
- Est-ce la bonne solution de mon problème?
- Une fois que j'ai la table de recherche, est-ce toujours la bonne façon de déclarer mes de navigation de la propriété, de sorte que je puisse ensuite l'utiliser comme utilisateur.Les rôles et les récupérer leurs rôles?
- où sera le RoleId dans le modèle de l'Utilisateur d'être renseigné à partir, tableau de Rôles ou User_Role?
- A avoir un ID dans la table de recherche toute utilisation?
Merci d'avance! J'apprécie vraiment votre expertise.
OriginalL'auteur edgarpetrauskas | 2014-03-14
Vous devez vous connecter pour publier un commentaire.
On doit d'abord se débarrasser de la
RoleId
propriété dans leUser
modèle. Avoir que comme une clé étrangère qui dit un seul rôle à un utilisateur. Depuis un utilisateur peut avoir plusieurs rôles, la clé étrangère ne doit pas être dans la table utilisateur, mais dans la table de mappage.Donc ce que vous avez est un plusieurs-à-plusieurs relations entre les utilisateurs et les rôles, et
Entity Framework
peut créer le besoin de table de mappage automatiquement sans avoir à configurer quoi que ce soit.Si vous avez simplement un
Roles
propriété dans leUser
entité et à unUsers
propriété dans leRole
entité, EF va comprendre que vous voulez un plusieurs-à-plusieurs entre les deux, et de créer un tableau avec les clés primaires des deux entités combinées de clé primaire, qui sera utilisé pour mapper les utilisateurs à des rôles.Lors du chargement d'un
User
à partir de la base de données que vous pouvez ensuite utiliser laRoles
propriété de navigation de comprendre les rôles de l'utilisateur, et vous pouvez charger uneRole
de comprendre les utilisateurs qui sont dans ce rôle.La façon la plus simple de le faire fonctionner serait quelque chose comme ceci:
L'exécution de ce code de résultats dans 3 tables comme ceci:
Super réponse! Une chose qui ne correspond pas à l'OP, c'est qu'il n'y a pas de champ ID dans UserRoles (voir User_Role dans le diagramme des relations de l'OP).
OriginalL'auteur Peter Hansen