MVC绑定产品到订单

时间:2016-06-03 12:14:12

标签: c# asp.net-mvc entity-framework data-binding

我有一个理解mvc中绑定过程的问题。所以我得到的是3个数据库表:订单,产品,PreOrders。我想为许多订单绑定相同的产品。现在我在订单模型中有这样的东西(我将产品保存在那里):

public virtual ICollection<Products> Product { get; set; }

拯救就是这样:

List<Products> productList = new List<Products>();
 foreach (int list in preOrderList)
            {
                var order = new Orders()
                {
                    //Product = (from item in )
                };

            var orderResult = _context.PreOrder.Single(o => o.Id == list);
            orderResult.Send = true;

            var productResult = _context.Products.Single(p => p.Id == orderResult.ProductId);
            var newProduct = new Products();
            newProduct.Name = productResult.Name;
            newProduct.Price = productResult.Price;
            productList.Add(newProduct);
            OrderList.Add(orderResult);
        }

        var orders = new Orders()
        {
            Product = productList
        };

        _context.Orders.Add(orders);
        _context.SaveChanges();

使用此代码我创建另一个产品,但我需要的是将产品绑定到此订单,然后将相同的产品添加到另一个订单。有可能吗?

P.S。

我尝试添加现有产品:

productList.Add(productResult);

但结果我只能分配一次产品。

1 个答案:

答案 0 :(得分:0)

这是一个EF问题而不是MVC问题。

您的产品类还需要一个导航器来订购,因此它有多种关系。目前,您有一个从订单到产品的一对多,以及从产品到订单的一对一。

in Products

public virtual ICollection<Orders> Orders { get; set; }

我认为你有这样的事情

public class Orders
{
    [key]
    public int OrderId {get;set;}
    public virtual ICollection<Products> Product { get; set; }
}
public class Product
{
    [key]
    public int ProductId {get;set;}
    [ForeignKey]
    public OrderId {get;set;}//remove this
    public virtual Orders Order {get;set;}//replace with ICollection<Orders>
}

也可以像这样使用流利

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

modelBuilder.Entity<Orders>()
            .HasMany<Product>(s => s.Products)
            .WithMany(c => c.Orders)
            .Map(cs =>
                    {
                        cs.MapLeftKey("OrderId");
                        cs.MapRightKey("ProductId");
                        cs.ToTable("TABLENAMEFORRELATIONALTABLE");
                    });

}