0

这些是我的课

public class Bill
    {
        [Key]
        public int BillID { get; set; }

        [Required]
        public int BillNumber { get; set; }

        [Required]
        public DateTime Date { get; set; }

        [Required]
        public string UserName { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        public string Adress { get; set; }

        [Required]
        public string PostalCode { get; set; }

        [Required]
        public string City { get; set; }

        [Required]
        public string Country { get; set; }

        public Bill()
        {
            Date = new DateTime();
            Date = DateTime.Now;
        }



public class Cart
    {
        [Key]
        public int CartID { get; set; }

        [Required]
        public int BillID { get; set; }

        [Required]
        [ForeignKey("BillID")]
        public virtual Bill Bill { get; set; }

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

public class CartItems
    {
        [Key]
        public int CartItemID { get; set; }

        [Required]
        public Product Product { get; set; }

        [Required]
        public int Qunatity { get; set; }
    }
}

我正在构建一个 ASP.NET 4 Web 应用程序。我想将产品添加到购物车时遇到问题,它会引发错误

一个实体对象不能被多个 IEntityChangeTracker 实例引用。

当我想在上下文中将购物车对象添加到购物车时。

Bill bill = new Bill();
            bill.BillNumber = Bill.GetLastBillNumber(context) + 1;
            bill.Adress = txtAdress.Text;
            bill.City = txtCity.Text;
            bill.Country = ddlCountry.SelectedItem.Value.ToString();
            bill.Name = txtName.Text;
            bill.PostalCode = txtPostalCode.Text;
            bill.UserName = lblUserName.Text;

            context.Bills.Add(bill);
            context.SaveChanges();

            Cart cart = new Cart();
            cart.Bill = bill;
            cart.BillID = bill.BillID;
            cart.Products = Application["CartProducts"] as List<CartItems>;

            context.Carts.Add(cart);
            context.SaveChanges();

我读到了这个问题,但我不能做分离它不适合我;

DataContext 在类中被定义为 privet

private DataContext context = new DataContext();

如果有人可以帮助我,请。

谢谢。

4

1 回答 1

0

您是否将产品加载到Application[CartProducts]其他地方,使用其他上下文?在那种情况下,这就是问题所在。

ADataContext是一个工作单元实现,这意味着您在单个操作中所做的所有工作都必须在同一上下文中完成。

虽然缓存产品通常是一个好主意,但它不起作用。您将不得不创建列表中对象的副本。

cart.Products = (Application["CartProducts"] as List<CartItems>).Select(ci =>
                 CartItem { ProductId = ci.ProductId, Quantity = ci.Quantity }).ToList();

请注意,我已替换ProductProductId以避免不得不再进入对象树的级别。在数据库中,对象之间的引用将作为外键实现,通过将其映射到ProductId您将能够访问它并直接使用它。有关映射外键的详细信息,请参阅我的这篇博文。

于 2013-11-12T21:53:17.723 回答