如何使用Entity Framework将相同的Pizza添加到Order表

问题描述 投票:0回答:2

我在添加相同的比萨饼时遇到问题。在代码中,当我调试一切都没问题但是在数据库中我有添加相同披萨和数据库的问题只添加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();

和ofc数据库显示

enter image description here

如何将相同的披萨添加到同一个订单?

c# entity-framework code-first
2个回答
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。检查此代码是因为我在不检查语法的情况下编写了文本。


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

但是如何获得订单中的所有元素,例如总价格为一个订单价格。

© www.soinside.com 2019 - 2024. All rights reserved.