Je travaille actuellement sur ma propre version d'adhésion en utilisant Entity Framework 4.0 et POCO. Après avoir lu le post du blog de Scotts Gu, j'ai décidé d'utiliser autant que possible les conventions.Entity Framework 4 (La requête Linq ne retourne pas mes rôles)
Jusqu'à présent, j'ai une classe appelée User:
public class User
{
[System.ComponentModel.DataAnnotations.Key]
public int UserId { get; set; }
[System.ComponentModel.DataAnnotations.StringLength(60)]
public string UserName { get; set; }
public string Password { get; set; }
[System.ComponentModel.DataAnnotations.ConcurrencyCheck]
public string Email { get; set; }
[System.ComponentModel.DataAnnotations.Timestamp]
public byte[] Timestamp { get; set; }
public ICollection<Role> Roles { get; set; }
}
et une classe appelée rôle
public class Role
{
[System.ComponentModel.DataAnnotations.Key]
public int RoleId { get; set; }
[System.ComponentModel.DataAnnotations.StringLength(50)]
public string RoleName { get; set; }
[System.ComponentModel.DataAnnotations.StringLength(300)]
public string RoleDescription { get; set; }
public ICollection<User> Users { get; set; }
}
Je installe également DbContext comme ceci:
public class BackboneDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
Ensuite, en fonction de ce Scott a suggéré que j'ai créé une classe Initializer héritant de RecreateDatabaseIfModelChanges.
Ensuite, dans cette classe, j'ajouter quelques éléments factices comme ceci:
protected override void Seed(BackboneDbContext context)
{
var roles = new List<Role>
{
new Role
{
RoleId = 0,
RoleName = "User",
RoleDescription = "This role belong to normal users.",
}
};
roles.ForEach(r => context.Roles.Add(r));
var users = new List<User>
{
new User {UserId = 1,
UserName = "Elham",
Email = "[email protected]",
Password = "xyz",
Roles = new List<Role>
{
roles[0]
}
}
};
users.ForEach(u => context.Users.Add(u));
}
Je l'espère donner un sens jusqu'ici. Si ce n'est pas le cas, le code ci-dessus remplit les tables avec des données factices si le schéma de base de données change.
Jusqu'à présent, tout est absolument génial. Je reçois les tableaux suivants:
rôles, Roles_Users et les utilisateurs
ils ont tous l'info j'ai besoin, mais le problème est quand j'utilise la requête LINQ suivante dans ma classe Repository pour obtenir tous les utilisateurs:
public IQueryable<User> GetAllUsers()
{
IQueryable<User> allUsers = from u in _backboneDbContext.Users select u;
return allUsers;
}
maintenant si je vérifie AllUsers avant de le transmettre pour voir, je reçois mes utilisateurs mais le rôle est réglé sur « nul »
Je ne sais pas pourquoi ... Des idées? Je vous remercie.
Merci beaucoup c'était la bonne réponse et son fonctionnement maintenant, j'ai rendu les propriétés virtuelles! :) Je préfère chargement paresseux .... – Raha