Как добавить ту же таблицу Pizza to Order с помощью Entity Framework - PullRequest
0 голосов
/ 19 февраля 2019

У меня проблема с добавлением той же пиццы к заказу.В коде, когда я отлаживаю, все в порядке, но в базе данных у меня проблема с добавлением той же пиццы, а в базу данных добавляют только одну и ту же пиццу.

Мой класс заказа:

public class Order
{
    public Order()
    {
        Sauces = new List<Sauce>();
        Pizzas = new List<Pizza>();
    }

    public int OrderId { get; set; }

    public virtual ICollection<Sauce> Sauces { get; set; }
    public virtual ICollection<Pizza> Pizzas { get; set; }

}

У меня есть метод:

var newOrder = new Order();

            var listsauces = new List<Sauce>();
            listsauces.Add(ctx.Sauces.Where(x => x.Id == 3).FirstOrDefault());
            listsauces.Add(ctx.Sauces.Where(x => x.Id == 3).FirstOrDefault());

            newOrder.Sauces = listsauces;

            var listPizzas = new List<Pizza>();
            listPizzas.Add(ctx.Pizzas.Where(x => x.Id == 1).FirstOrDefault());
            listPizzas.Add(ctx.Pizzas.Where(x => x.Id == 2).FirstOrDefault());
            listPizzas.Add(ctx.Pizzas.Where(x => x.Id == 1).FirstOrDefault());

            newOrder.Pizzas = listPizzas;

            ctx.Orders.Add(newOrder);
            ctx.SaveChanges();

И база данных ofc показывает

enter image description here

Как добавить ту же пиццу в тот же заказ?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

@ andercruzbr Это мой dbcontext:

   public DbSet<Pizza> Pizzas { get; set; }
   public DbSet<Sauce> Sauces { get; set; }
   public DbSet<Idgredient> Idgredients { get; set; }
   public DbSet<Order> Orders { get; set; }
   public DbSet<OrderSauceItem> OrderSauce { get; set; }
   public DbSet<OrderPizzaItem> OrderPizza { get; set; }
   public DbSet<PizzaIdgredientItem> PizzaIdgredient { get; set; }

Это нормально, когда у меня есть данные в базе данных:

var newOrder = new Order();
var listsauces = new List<OrderSauceItem>();
listsauces.Add(new OrderSauceItem {SauceId = ctx.Sauces.Where(x => x.Id == 3).FirstOrDefault(), Quantity = 1 });

newOrder.Sauces = listsauces;

var listPizzas = new List<OrderPizzaItem>();
listPizzas.Add(new OrderPizzaItem {  PizzaId = ctx.Pizzas.Where(x => x.Id == 1).FirstOrDefault(), Quantity = 2 });
                listPizzas.Add(new OrderPizzaItem {PizzaId = ctx.Pizzas.Where(x => x.Id == 2).FirstOrDefault(), Quantity = 2 });

newOrder.Pizzas = listPizzas;

ctx.Orders.Add(newOrder);
ctx.SaveChanges();

Моя база данных показывает:

enter image description here

Но как получить все элементы в моем Ордене и, например, суммировать цены в одну цену ордера.

0 голосов
/ 19 февраля 2019

Попробуйте что-нибудь подобное.

public class OrderPizzaItem 
{
    public Pizza Pizza { get; set; }
    public int Quantity { get; set; }
}

public class OrderSauceItem 
{
    public Pizza Pizza { get; set; }
    public int Quantity { get; set; }
}

public class Order
{
    public Order()
    {
        Sauces = new List<OrderSauceItem>();
        Pizzas = new List<OrderPizzaItem>();
    }

    public int OrderId { get; set; }

    public virtual ICollection<OrderSauceItem> Sauces { get; set; }
    public virtual ICollection<OrderPizzaItem> Pizzas { get; set; }

}



var newOrder = new Order();

var listsauces = new List<OrderSauceItem>();
listsauces.Add(new OrderSauceItem { Sauce = ctx.Sauces.Where(x => x.Id == 3).FirstOrDefault(), Quantity = 2});

newOrder.Sauces = listsauces;

var listPizzas = new List<OrderPizzaItem>();
listPizzas.Add(new OrderPizzaItem { Pizza = ctx.Pizzas.Where(x => x.Id == 1).FirstOrDefault(), Quantity = 2});
listPizzas.Add(new OrderPizzaItem { Pizza = ctx.Pizzas.Where(x => x.Id == 2).FirstOrDefault(), Quantity = 1})

newOrder.Pizzas = listPizzas;

ctx.Orders.Add(newOrder);
ctx.SaveChanges();

PS.Проверьте этот код, потому что я написал текст без проверки синтаксиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...