0

我正在写一个商业应用程序,并且遇到了一个令人沮丧的错误,它不告诉我实际的错误是什么。将购物车项目添加到数据库时出错

Error Message Details

这是一个正在运行

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult AddToCart(int product_ID) 
{ 
    if (db.Products.Any(product => product.Product_ID == product_ID)) 
    { 
     //var successfulAddToCart = false; 
     var cartItem = new Cart(); 

     // cartItem.CartID = Guid.NewGuid(); 

     if (Request.IsAuthenticated) 
     { 
      var Customer = db.Customers.FirstOrDefault(customer => customer.Email == User.Identity.Name); 
      cartItem.Customer = Customer; 
      cartItem.CustomerID = Customer.Customer_ID; 
     }      
     else//not logged in, need to remember them somehow 
     { 
      // add a cookie for a guest user so we can save their cart for some time. 
      var CartCookie = new HttpCookie("Cart", Guid.NewGuid().ToString()); 
      CartCookie.Expires.AddDays(2); 
      Request.Cookies.Add(CartCookie); 
      cartItem.Customer = new Customer(); 
      cartItem.CustomerID = null; 
     } 

     //obviously not checked out since we just added to cart 
     cartItem.IsCheckedOut = false; 
     cartItem.Quantity = 1; 
     //one to one with product, so grab the first sku you find. 
     var Sku = db.SKU_Table.SingleOrDefault(sku => sku.Product_ID == product_ID); 
     cartItem.Sku = Sku; 
     cartItem.SkuID = Sku.SKU_ID; 
     //if everything is okay, save the changes to the database 
     if (ModelState.IsValid) 
     { 
      db.Cart.Add(cartItem); 
      db.SaveChanges(); 
     } 


     //return a content string that displays success or failure 
     return Content("Add to cart was successful"); 
    } 
    return Content("Add to cart was not successful");//unsuccessful add 
} 

现在据我可以告诉代码,我的模型是非常有效的,我不知道是什么问题的来源是。如果这会有所帮助,我可以发布购物车项目对象的值。错误消息并没有真正的帮助,我没有看到我的模型状态有什么问题,尤其是在它传递之后。

这里是车模型

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Web; 

namespace SeniorProjectMVC.Models 
{ 
    [Table("Cart")] 
    public class Cart 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int ID { get; set; } 
     public Guid CartID { get; set; } 
     public int SkuID { get; set; } 
     public virtual Sku Sku { get; set; } 
     [Required] 
     public int Quantity { get; set; } 
     public int? CustomerID { get; set; } 
     public virtual Customer Customer { get; set; } 
     public bool IsCheckedOut { get; set; } 
    } 
} 
+0

* RequiredAttribute属性指定当表单上的字段被验证时,该字段必须包含一个值。如果属性为空,包含空字符串(“”)或仅包含空格字符,则会引发验证异常。* ....请检查您的'else'这行代码中的内容'cartItem.CustomerID = null; '......改变它的类似'cartItem.CustomerID = 0;'看看它是否工作:) – Hackerman

+0

我试过,并且该字段不需要在数据库中,因为它是一个可为空的整数。它在我的数据库中作为一个可空的int字段出来 – ddeamaral

+1

检查'if(ModelState.IsValid)'是无意义的(你的模型是'int product_ID')并且它不需要设置'cartItem.Customer'和'cartItem.Sku'属性(只是相关的'CustomerID'和'SkuID'属性)。您没有为“CartID”设置一个值(您已注释掉该行),因此会引发异常。 –

回答

0

我可以看到你所做的客户ID模型为空的,但也试着做你的数据库的客户ID字段可空,以及或允许客户ID字段取空值。

+0

我已经完成了。我试着用0输入它,并用null值发送它。在我的数据库中,如果我展开我的购物车表格的列面板,它说我的CustomerID是一个FK类型为int的外键。 – ddeamaral

+0

你可以试试这个,让我告诉我最新的错误是什么? http://mattrandle.me/viewing-entityvalidationerrors-in-visual-studio/ –