2013-01-12 28 views
10

Non riesco a trovare una sintassi di relazione uno-a-molti nell'API fluente.API fluente - uno a molti

Come esempio ho due tabelle come sotto

utente

Id 
Name 

UserHistory

Id 
UserId 
Date 

Nelle classi ho il seguente

public class User 
{ 
    public int Id { get; set; } 
    public virtual ICollection<UserHistory> Histories { get; set; } 
} 

public class UserHistory 
{ 
    public int Id { get; set; } 
    public int UserId { get; set; } 
    public DateTime Date { get; set; } 
} 

Ho provato quanto segue ma non sono sicuro che sia effettivamente corretto.

modelBuilder.Entity<User>() 
     .HasRequired(w => w.Histories) 
     .WithMany(); 

modelBuilder.Entity<User>() 
     .HasMany(f => f.Histories) 
     .WithOptional() 
     .HasForeignKey(f => f.UserId); 

Qual è la sintassi corretta per la relazione uno-a-molti?

Tecnicamente potrei suddividerlo in un molti-a-molti aggiungendo una nuova tabella ma non volevo introdurre un'altra tabella.

risposta

24

nel modello un User un'entità ha moltiHistoriescon ogni storia ha un richiestoUser e il rapporto ha un estera chiave chiamato UserId:

modelBuilder.Entity<User>() 
    .HasMany(u => u.Histories) 
    .WithRequired() 
    .HasForeignKey(h => h.UserId); 

(La relazione deve essere richiesto (non facoltativo) perché la proprietà della chiave esterna UserId non è nullab le.)

+1

Se UserHistory UserId era annullabile, sarebbe WithOptional()? – fes

+1

@fes: Sì, giusto. – Slauma

Problemi correlati