2013-04-09 1 views
0

Je suis en train de faire quelque chose de semblable à ce que cette réponse précédente avait ici: How to declare one to one relationship using Entity Framework 4 Code First (POCO)Entity Framework 5 relation un à un (par exemple l'utilisateur -> Profil) - ModelBuilder ASP.NET MVC4

Le problème est, im très nouveau à cela et j'utilise Entity Framework 5 code d'abord et le HasConstraint n'existe plus, pour ne pas mentionner Im pas bon à lamda. Je me demandais si quelqu'un pouvait aider à développer ceci afin que je puisse mapper une classe User à une classe Profile efficacement et facilement? Je dois savoir comment faire pour les fichiers de configuration et constructeur modèle

Chaque utilisateur a un profil

En outre, une autre question rapide, par exemple le modèle de profil avait des listes dans ce domaine, comment pourrais-je mettre ces efficacement le constructeur du modèle et les fichiers de configuration?

Merci

Répondre

0

par exemple

public class User 
{ 
    public int Id { get; set; } 
    public string Username { get; set; } 
    public Profile Profile { get; set; } 
    // public int ProfileId { get; set; } 
} 

public class Profile 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string PostalCode { get; set; } 
} 
// ... 
modelBuilder.Entity<User>() 
    .HasOptional(x => x.Profile) 
    .WithRequired(); 

ProfileId est inutile, FK est sur 'l'autre côté de la barrière' (en Profile).
(ce qui est le plus logique OMI)

Si vous avez besoin d'un Id dans User (par exemple, pour être en mesure de remplir Profile juste par son ID lors de l'ajout User - qui, si l'un à l'un est pas vraiment utilisé - que vous créez à la fois le profil et l'utilisateur), vous pouvez inverser ...

modelBuilder.Entity<User>() 
    .HasRequired(x => x.Profile) 
    .WithOptional(); 

... et votre ProfileId est en fait dans le Id (pk -> pk).

0

Cette solution a fonctionné pour moi

protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
modelBuilder.Entity<ApplicationUser>(entity => 
      { 
       entity.HasKey(e => e.Id); 
       entity.Property(e => e.Id).HasMaxLength(450); 
       entity.HasOne(d => d.Profile).WithOne(p => p.User); 
      }); 


modelBuilder.Entity<UserProfile>(entity => 
      { 
       entity.HasKey(e => e.Id); 
       entity.Property(e => e.Id).HasMaxLength(450); 
       entity.Property(e => e.Type) 
        .HasMaxLength(10) 
        .HasColumnType("nchar"); 
       entity.HasOne(d => d.User).WithOne(p => p.Profile); 
      }); 

} 
Questions connexes