0

我正在挑战自己做一个小型网上商店,但在我的数据库中存储订单时遇到了问题。

这是我的订单课程

    [Key]
    public int Id { get; set; }
    public IEnumerable<BasketProduct> BasketProducts { get; set; }
    public string UserName { get; set; }

哪个存储 BasketProducts(没有 int Id 它不想工作,但我不知道它为什么需要它)

    public int Id { get; set; }
    public Product Product { get; set; }
    public int Quantity { get; set; }

在 BasketController 中,如果用户点击结帐,我想创建一个订单并将其放入数据库

public ActionResult CreateOrder()
        {
            //GetCurrentBasket returns a basket of current session
            var baskItems = GetCurrentBasket().Items;

            Order order = new Order { BasketProducts = baskItems, UserName = User.Identity.Name };
            EFDbContext ent = new EFDbContext();
            ent.Orders.Add(order);
            ent.SaveChanges();

            return RedirectToAction("Index", "Checkout", new { order = order });
        }

在结帐 Index 方法中,它应该只接受 Order 对象并显示其中的所有产品

       @model Domain.Elements.Order
       //some code omitted
       @foreach (var item in Model.BasketProducts)
       {
          <p>@item.Product.Name</p>
          <p>@item.Quantity</p>
       }

问题是在我的数据库中(在订单表中)它只创建了 ID 和用户名,所以我无法检索当前人订购的任何产品。

我做错了什么,或者我错过了一些使它起作用的东西?提前致谢。

编辑:这是我现在得到的错误。你调用的对象是空的。

4

1 回答 1

-1

似乎问题出在您保存到数据库时。我相信在添加实体时,您会希望将它们添加到内容上的特定 DbSet 中。尝试这样的事情:

public ActionResult CreateOrder()
{
    //GetCurrentBasket returns a basket of current session
    var baskItems = GetCurrentBasket().Items;

    var context = new EFDbContext();
    var orders = context.GetDbSet<Order>();

    var order = orders.Create(); //use the DbSet to create your new entity
    order.BasketProducts = baskItems;
    order.UserName = User.Identity.Name;

    orders.Add(order);

    try
    {
        context.SaveChanges();
    }
    catch(DatabaseException ex)
    {
    }

    return RedirectToAction("Index", "Checkout", new { order = order });
 }

我已将您的 Context.SaveChanges() 调用包装在 try/catch 中。如果我有一个错误保存到数据库,我通常会这样做,这样我就可以调试和单步执行它,任何数据库级别的异常都会被捕获,你可以看到发生了什么。

于 2012-11-14T03:42:54.013 回答