2012-02-11 4 views
1

Cela créera deux tables "Ingrédient" et "Recette" et une table supplémentaire pour le mappage plusieurs-à-plusieurs.Recette - base de données d'ingrédients dans Entity Framework ASP.NET MVC

public class DC : DbContext { 
    public DbSet<Ingredient> Ingredients { get; set; } 
    public DbSet<Recipe> Recipes { get; set; } 
} 

public class Ingredient { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Recipe> Recipes { get; set; } 
} 

public class Recipe { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Ingredient> Ingredients { get; set; } 
} 

Question: Je veux inclure la colonne « quantité » supplémentaire dans la troisième table de mappage qui sera créé par Entity Framework. Comment rendre cela possible? Merci d'avance.

Répondre

3

Lorsque vous avez des informations supplémentaires, je suppose que cela ne comptera plus vraiment comme une table de mappage - ce n'est pas juste un mappage plusieurs-à-plusieurs. Je pense que vous devriez juste modèle comme une autre table:

public class Ingredient { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<RecipePart> RecipeParts { get; set; } 
} 

public class RecipePart { 
    public int Id { get; set; } 
    public Ingredient { get; set; } 
    public Recipe { get; set; } 
    // You'll want to think what unit this is meant to be in... another field? 
    public decimal Quantity { get; set; } 
} 

public class Recipe { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<RecipePart> Parts { get; set; } 
} 

Alors maintenant, vous n'avez pas vraiment beaucoup à plusieurs cartographie - vous avez deux plusieurs à l'ordinaire mappings. Avez-vous vraiment besoin de cartographie "ingrédient à recettes" exposée dans votre modèle du tout? Si vous voulez trouver toutes les recettes qui utilisent un ingrédient particulier, vous pouvez toujours faire une requête telle que:

var recipies = DB.Recipies.Where(r => r.Parts 
             .Any(p => p.Ingredient == ingredient)); 
+0

Merci pour l'aide, mais depuis que je suis nouveau à Entity Framework, j'ai une question à propos de la classe RecipePart que vous avez fournie. Devrait-il être: "public Ingredient Ingredient {get; set;};" ou "public int IngredientID {get; set;}"? – Acute

+0

@Acute: Je ne pourrais pas dire, j'ai peur - je ne sais pas assez sur EF moi-même. –

Questions connexes