2012-11-13 139 views
0

我正在挑戰自己製作一個小型網上商店,但在我的數據庫中存儲訂單時遇到問題。產品的商店清單數據庫

這是我的Order類

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

存儲BasketProducts(不INT標識,它不想工作,但我不知道爲什麼需要它)

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 }); 
     } 

而在結賬指數方法應該只是把Order對象,並顯示所有的產品在它

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

的問題是,在我的DB(以表)僅創建ID和用戶名,所以我不能獲取任何產品當前人訂購。

我做了什麼錯誤,或者我失去了一些東西使它工作?提前致謝。

編輯:這是我現在得到的錯誤。 未將對象引用設置爲對象的實例。

+0

什麼是GetCurrentBasket(),它是如何填充的?您是否將您的表單從您的視圖發佈到您的CreateOrder()操作? –

+0

哪裏發生異常? – Zabavsky

+0

GetCurrentBasket從當前會話中返回Basket對象。索引方法沒有做任何特殊的處理:ActionResult Index(Order order){return View(order);} – asdewka

回答

0

它似乎是問題是當你保存到數據庫。我相信在添加實體時,您會希望將它們添加到內容中的特定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。我通常會這樣做,如果我有一個錯誤保存到數據庫,這樣我可以調試和逐步通過它,任何數據庫級別的異常將被捕獲,你可以看到發生了什麼。

+0

不幸的是錯誤保持不變。 未將對象引用設置爲對象的實例。 – asdewka

相關問題