如何使用实体框架将相同的比萨饼添加到订单表

时间:2019-02-19 00:28:31

标签: c# entity-framework code-first

我在向订单中添加相同的披萨时遇到问题。在代码中,当我调试时一切正常,但是在数据库中,我添加相同的披萨遇到了问题,而数据库仅添加了1个相同的披萨。

我的订单分类:

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();

andofc数据库显示

enter image description here

如何将相同的比萨饼添加到相同的订单中?

2 个答案:

答案 0 :(得分:0)

尝试类似的事情。

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。请检查此代码,因为我在编写文本时未检查语法。

答案 1 :(得分:0)

@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

但是如何获取订单中的所有元素,例如将价格总和成一个订单价格。