首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中存储产品列表

在数据库中存储产品列表
EN

Stack Overflow用户
提问于 2012-11-13 23:14:31
回答 1查看 1K关注 0票数 0

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

这是我的Order类

代码语言:javascript
复制
    [Key]
    public int Id { get; set; }
    public IEnumerable<BasketProduct> BasketProducts { get; set; }
    public string UserName { get; set; }

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

代码语言:javascript
复制
    public int Id { get; set; }
    public Product Product { get; set; }
    public int Quantity { get; set; }

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

代码语言:javascript
复制
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 });
        }

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

代码语言:javascript
复制
       @model Domain.Elements.Order
       //some code omitted
       @foreach (var item in Model.BasketProducts)
       {
          <p>@item.Product.Name</p>
          <p>@item.Quantity</p>
       }

问题是在我的DB中(在Order表中),它只创建了Id和UserName,所以我不能检索当前人员订购的任何产品。

我做错了什么,或者我错过了什么才能让它工作?提前谢谢。

编辑:这是我现在得到的错误。对象引用未设置为对象的实例。

EN

回答 1

Stack Overflow用户

发布于 2012-11-14 11:42:54

问题似乎出在你保存到数据库的时候。我相信,在添加实体时,您会希望将它们添加到内容上的特定DbSet。尝试如下所示:

代码语言:javascript
复制
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中。我通常这样做,如果我有一个错误保存到数据库,这样我就可以调试和单步通过它,任何数据库级的异常将被捕获,您可以看到发生了什么。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13363313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档