De quoi ai-je besoin d'ajouter dans OnModelCreating(DbModelBuilder modelBuilder) fonction pour définir les relations entre la Personne et le Rôle?
Je suis en utilisant EntityFramework version 5.0 en WinForms projet .net 4.5.
J'ai créé 2 pour moi Entités importantes
public class Role
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public bool StockPermission { get; set; }
public bool ItemPermission { get; set; }
public bool OrderPermission { get; set; }
public bool PersonPermission { get; set; }
public bool StatisticPermission { get; set; }
}
public class Person
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String Name { get; set; }
public String Nickname { get; set; }
public String Contact { get; set; }
public System.DateTime Created { get; set; }
public String Pincode { get; set; }
public virtual ICollection<Role> Role { get; set; }
public virtual Person Creator { get; set; }
}
et dbContext classe:
public class SusibarDbContext : DbContext
{
public DbSet<Entity.Role> Roles { get; set; }
public DbSet<Entity.Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//base.OnModelCreating(modelBuilder);
}
}
s'il vous plaît, pouvez-vous m'aider à ce que je dois ajouter dans OnModelCreating(DbModelBuilder modelBuilder)
fonction pour définir les relations entre la Personne et le Rôle?
Personne peut avoir plusieurs Rôle(s) (mais ne peut pas être null), différentes Personnes peuvent avoir le même Rôle(s).
Personne peut avoir un "créateur" Personne (peut être null), différentes Personnes peuvent avoir le même "créateur"
Si vous pouviez avoir la gentillesse, juste de m'informer de la solution 🙁
Ok, je l'ai résolu! dans quelques minutes je vais ajouter la solution (du déjeuner du premier)
OriginalL'auteur eCorke | 2012-12-07
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser l'API Fluent pour cela, regardez cette rubrique à partir de MSDN. Vous devez utiliser Plusieurs-à-Plusieurs relations et EF créer une table requis pour le cas lorsque la Personne peut avoir plusieurs Rôles et du Rôle de beaucoup de Personnes. Quelque chose comme ceci:
Vous pouvez également créer cette relation sans l'aide d'API Fluent. Vous devez créer un système de navigation de la propriété
ICollection<Person> Persons
dans le Rôle de la classe et de l'EF permettra de créer des tables et des relations.----constructeur.Entité<TriviaOption>() .HasKey(o => new { o.QuestionId, o.Id }); builder.Entité<TriviaAnswer>() .HasOne(a => un.TriviaOption) .WithMany() .HasForeignKey(a => new { un.QuestionId, une.OptionId }); builder.Entité<TriviaQuestion>() .HasMany(q => q.Les Options) .WithOne(o => o les.TriviaQuestion);
OriginalL'auteur klappvisor
Quelque chose comme cela devrait faire l'affaire:
Créer un POCO appelé
PersonRole
. Ceci dans le but de modéliser la relation entre unePerson
et unRole
.Dans le
Person
classe, remplacer:avec:
Si vous le souhaitez, vous pouvez ajouter le texte suivant à la
Role
classe:cela est optionnel, mais il peut être utile si vous êtes désireux de regarder tous les
People
avec un particualRole
.Dans le
OnModelCreating
méthode, utilisez ce code pour s'assurer qu'unPersonRole
va appliquer non nullablePerson
etRole
propriétés.Edit:
La raison de la création de la
PersonRole
POCO est de veiller à ce qu'unRole
peuvent être réutilisées dans d'autres utilisateurs. À l'aide de l'existantpublic virtual ICollection<Role> Role { get; set; }
de travail, mais il ne sera probablement pas fonctionner comme prévu.Avec la relation
public virtual ICollection<Role> Role { get; set; }
, ce que EF va faire est d'augmenter laRole
table avec un champ supplémentaire, par exemple,PersonId
, qui sera utilisé pour relier unPerson
à leurRoles
. Le problème avec cela est clair: sans le relierPersonRole
table, vous ne serez pas en mesure de donner à deux personnes de la mêmeRole
.voir mon edit.
N'est-il pas une autre solution? Une sorte de définition, qu'un rôle peut avoir de nombreuses personnes (relation "un à plusieurs", mais de faire de la Personne à avoir des rôles dans la liste? Je sais comment créer avec realtions entités, mais je pense que cela peut Entity Framework créer dans backened.
comment pourrait-on garantir l'unicité de {Person_ID,Role_ID} paire stockées dans PersonRole table?
OriginalL'auteur nick_w
Mais pas de réponse à votre question directement, utiliser EF des conventions de nommage pour éviter Annotaions et de garder vos classes d'entités propres.
Je vais vous montrer 2 situations:
D'un Nombre à l'aide de EF Convention de Nommage
Rôle a Beaucoup de Personnes, Personne a un Rôle
Un de Nombreux cas Où Aucune convention de Nommage Existe (Parent-Enfant du même Type)
Personne a beaucoup de création, la Personne a un seul Créateur)
Pour le Créateur relation dans OnModelCreating:
Avec, "ClassName" + "Id" (sensible à la casse), EF va supposer que c'est la Clé Primaire /Identifiant automatiquement.
Le Rôle de Personne de la relation sera créé automatiquement en raison de la Virtuel de Cartographie combiné avec le PrimaryKey "RoleId"
OriginalL'auteur Talon