2017-05-25 80 views
1

订单,并保存在这个方法需要访问和编辑属性在数据库中创建

public async Task<ActionResult> FirstClassCreate(FormCollection values) 
    { 
     var order = new Order(); 
     TryUpdateModel(order); 
     var customer = db.Users.FirstOrDefault(x => x.Email == User.Identity.Name); 
     var cart = ShoppingCart.GetCart(this.HttpContext); 

     try 
     { 
      order.DeliveryDate = DateTime.Now.AddDays(1); 

      order.DeliveryMethod = "First Class"; 
      order.FirstName = customer.FirstName; 
      order.LastName = customer.LastName; 
      order.PostalCode = customer.PostalCode; 
      order.State = customer.State; 
      order.City = customer.City; 
      order.Email = customer.Email; 
      order.Country = customer.Country; 
      order.Phone = customer.PhoneNumber; 
      order.Address = customer.Address; 
      order.HasPaid = false; 
      order.Username = customer.Email; 
      order.OrderDate = DateTime.Now; 
      var currentUserId = User.Identity.GetUserId(); 
      order.Total = cart.GetFirstClass(); 

      if (order.SaveInfo && !order.Username.Equals("[email protected]")) 
      { 
       var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); 
       var store = new UserStore<ApplicationUser>(new ApplicationDbContext()); 
       var ctx = store.Context; 
       var currentUser = manager.FindById(User.Identity.GetUserId()); 

       //Save this back 
       //http://stackoverflow.com/questions/20444022/updating-user-data-asp-net-identity 
       //var result = await UserManager.UpdateAsync(currentUser); 
       await ctx.SaveChangesAsync(); 

       await storeDB.SaveChangesAsync(); 
      } 

      //Save Order 
      storeDB.Orders.Add(order); 
      await storeDB.SaveChangesAsync(); 

      //Process the order 
      cart = ShoppingCart.GetCart(this.HttpContext); 
      order.Total = cart.GetFirstClass(); 

      order = cart.CreateOrder(order); 

      return RedirectToAction("FirstClass", "Checkouts", order); 
     } 
     catch 
     { 
      //Invalid - redisplay with errors 
      return View(order); 
     } 
    } 

我需要访问订单数据库,并更改特定顺序的属性,使用电子邮件作为唯一标识符并搜索最新(使用订单日期找到最新的,其中'haspaid' = false)。

using()//Insert database context here) 
     { 
      //Search for order in the database, try using the email as the Unique Identifire and search for the newest where haspaid = false 

      //Change the haspaid attribute to true 
      var orders = from o in db.Orders 
         where o.Email == User.Identity.Name, o.HasPaid = false, //Newest 
         select o; 
      order.HasPaid = true; 
      db.Orders.SaveChanges(); 
      //save database changes 
     } 
+1

您面临什么问题或者您希望某人代表您写代码? –

+0

你的问题很不清楚。你这样做的问题究竟是什么?你有例外吗?还是结果不存储到数据库?还有什么是你的问题? – HimBromBeere

+0

**独特**意味着只有1个,您为什么需要进一步过滤?您的结构中是否没有_ ** OrderID ** _? –

回答

1

如果我正确理解你,你不知道如何查询你想要更新的记录。因此,您需要使用Where()过滤记录并使用Max()函数获取最新日期。

var orderToBeChanged = db.Orders 
    .Where(o => o.HasPaid == false && o => o.Email == User.Identity.Name) 
    .Max(o => o.OrderDate);