0

Bonjour,asp.net entity framework confused

Mon programme me pose tellement de problèmes. Tout d'un coup, il me donne une erreur:

Nom de colonne invalide 'UserProfile_UserId'.

pour ce code:

public ActionResult Index() 
{ 
---> var model = _db.Roles.ToList();  
return View(model); 

Ce qui est logique. Mais le problème est i.m même en utilisant la classe de profils utilisateur. Im en utilisant la classe Rôles.

Voici mon contrôleur:

FSKDb _db = new FSKDb(); 
    // 
    // GET: /Roles/ 

    public ActionResult Index() 
    { 
     var model = _db.Roles.ToList(); 

     return View(model); 
    } 

et voici ma classe DB:

namespace Attempt3.Models 
{ 
public class FSKDb : DbContext 
{ 
    public FSKDb() : base("name=DefaultConnection") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
    public DbSet<Roles> Roles { get; set; } 
} 
} 

classe Rôles:

[Table("webpages_Roles")] 
public class Roles 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int RoleId { get; set; } 
    public string RoleName { get; set; } 
    public string Description { get; set; } 
} 

UserProfile Classe

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Surname { get; set; } 
    public string ClientCode { get; set; } 
    public ICollection<Roles> UserRoles { get; set; } 
} 

Im ne sais pas pourquoi quand j'essayer de trouver des rôles dans mon contrôleur que l'EF tente de rechercher l'utilisateur Profiles_UserID

Il ne devrait chercher que si je suis à la recherche d'un utilisateur, pas un rôle. et même si le nom de coloumn UserProfile UserId est juste « UserId » et non « UserProfile_UserId »

Merci

+0

Hey, j'ai copié tout le code en om votre question et je n'ai pas eu de problèmes. Avez-vous des connaissances sur OnModelCreating ou d'autres parties fluides de EF? –

+0

Deuxième question: votre code EF génère une relation un-à-plusieurs entre l'utilisateur et le rôle (un utilisateur a de nombreux rôles, un rôle a un utilisateur). Cela semble très étrange. Peut-être que vous avez besoin d'une relation plusieurs-à-plusieurs? (Un utilisateur a de nombreux rôles, un rôle a de nombreux utilisateurs). Si c'est le cas, vous devez ajouter à la collection de classes Roles des UserProfiles. –

+0

Quelque chose est très bizarre, ça fonctionnait aussi pour moi et ça a commencé avec cette erreur, mais ça a quelque chose à voir avec mes modèles. J'essaie d'entrer des rôles dans la table des rôles générés par défaut.}} – Zapnologica

Répondre

0

Vous avez un à plusieurs entre UserProfile et Roles. Ainsi, chaque rôle est associé à un utilisateur et, par conséquent, UserProfile_ID est stocké dans la table Roles. Pour construire many-to-many vous devez faire:

  1. Précisez dans la classe UserProfile qu'il ait beaucoup Roles - fait par vous
  2. Spécifiez dans la classe Role qu'il a beaucoup UserProfiles:

    [Table("webpages_Roles")] 
    public class Roles 
    { 
        [Key] 
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
        public int RoleId { get; set; } 
        public string RoleName { get; set; } 
        public string Description { get; set; } 
        public ICollection<UserProfile> Users { get; set; } 
    } 
    

Oui, c'est tout. Maintenant EF va générer la troisième table nommée UserProfileRoles et fera des relations un-à-plusieurs cachées entre UserProfile et UserProfileRoles, entre Role et UserProfileRoles.Si vous voulez changer le nom de la table, dans votre classe de contexte, vous devez remplacer OnModelCreating et utiliser api couramment pour configurer le mappage des classes aux tables:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder 
     .Entity<UserProfile>() 
     .HasMany<Roles>(u => u.UserRoles) 
     .WithMany(u => u.Users) 
     .Map(m => { 
      m.ToTable("_myOwnMapTable_UserProfile__Roles"); 
     }); 

    base.OnModelCreating(modelBuilder); 
} 

Liens:

  1. Get Started with Entity Framework (EF)
  2. Configuring/Mapping Properties and Types with the Fluent API
  3. Configuring Relationships with the Fluent API