Рецепт - база данных ингредиентов в Entity Framework ASP.NET MVC - PullRequest
1 голос
/ 11 февраля 2012

Это создаст две таблицы «Ингредиент» и «Рецепт» и дополнительную таблицу для отображения «многие ко многим».

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; }
}

Вопрос. Я хочу включить дополнительный столбец «количество» в третью таблицу сопоставлений, которая будет создана Entity Framework. Как сделать это возможным? Заранее спасибо.

1 Ответ

3 голосов
/ 11 февраля 2012

Когда у вас есть дополнительная информация, я подозреваю, что она больше не будет считаться таблицей сопоставления - это не просто сопоставление «многие ко многим».Я думаю, что вы должны просто смоделировать это как другую таблицу:

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; }
}

Так что теперь у вас на самом деле нет сопоставления «многие ко многим» - у вас есть два обычных сопоставления «многие к одному».Вам определенно нужно, чтобы «ингредиент к рецептам» отображался в вашей модели вообще?Если вы хотите узнать все рецепты, которые используют тот или иной ингредиент, вы всегда можете сделать запрос, например:

var recipies = DB.Recipies.Where(r => r.Parts
                                       .Any(p => p.Ingredient == ingredient));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...