2017-02-22 5 views
1

J'ai cette classeEF - Deux relations entre les deux classes - api Courant avec le code premier

public class Client 
{ 
    public int Id { get; set; } 
    public ICollection<Recipe> Recipes { get; set; } 
    public ICollection<Recipe> Favorites { get; set; } 
} 

qui a 2 1 à plusieurs avec la classe de recette

public class Recipe 
{ 
    public int Id { get; set; } 
    public int ClientId { get; set; } 
    public Client Client { get; set; } 
} 

Comment puis-je décrire ces deux relations? Ai-je besoin d'une classe supplémentaire (favorite)?

Merci pour l'aide.

EDIT:

J'aurais été plus clair. Client.Recipes est les recettes que le client possède en fait:

modelBuilder.Entity<Client>() 
    .HasMany(c => c.Recipes) 
    .WithRequired(r => r.Client) 
    .HasForeignKey(r => r.ClientId); 

le problème avec Client.Favorites est qu'il ne possède pas les ainsi Recipe.ClientId est invalide pour cette relation particulière. J'ai besoin d'une table relationnelle pour cela, ai-je besoin de l'exprimer dans une classe ou peut-elle être exprimée dans Fluent Api? Si oui, comment? Désolé, si je n'étais pas explicite au début.

+0

Voir la [réponse couramment] (http://stackoverflow.com/a/5559300/2030565) et voici une avec [annotations de données] (http://stackoverflow.com/ questions/28582454/ef-6-comment-set-two-foreign-keys-to-same-table). – Jasen

+0

La même recette ne peut-elle pas appartenir à un autre client? Cela ferait beaucoup pour beaucoup. –

+0

Maintenant, ma question est: une recette peut-elle être préférée par plus d'un client? (Je pense) –

Répondre

1

Vous devriez pouvoir les définir comme une relation 1 à N standard. Devrait être quelque chose de similaire à ce

class MyContext : DbContext 
{ 
    public DbSet<Client> Clients { get; set; } 
    public DbSet<Recipe> Recipes { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Client>() 
      .HasOne(p => p.Clients) 
      .WithMany(b => b.Recipes) .HasForeignKey(x => x.ClientId); 

     modelBuilder.Entity<Client>() 
      .HasOne(p => p.Clients) 
      .WithMany(b => b.Favorites) .HasForeignKey(x => x.ClientId); 
    } 
}