我有一个理解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);
但结果我只能分配一次产品。
答案 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");
});
}