簡體   English   中英

為什么屬性值不能保存到mvc 4應用程序中的數據庫。

[英]why won't Property values save to database in mvc 4 application.

我正在嘗試擴展教程(Pro ASP.NET 4,sportsStore)。 我想包含一個訂單表來跟蹤所有已完成的訂單。

我在Sql中創建了表,並創建了一個與之匹配的模型。

      public class Orders
{

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int OrderId { get; set; }

    public int ProductID { get; set; }

    public int Quantity { get; set; }

    public decimal OrderTotal { get; set; }

    public string Name { get; set; }

    public string Line1 { get; set; }

    public string Line2 { get; set; }
    public string Line3 { get; set; }

    public string City { get; set; }

    public string State { get; set; }

    public string Zip { get; set; }

    public string Country { get; set; }

    public bool GiftWrap { get; set; }
}

}

這是來自其他兩個模型的屬性以及一個OrderID的組合。

我將以下內容添加到EFDbContext-

  public DbSet<Orders> Orders { get; set; }

在我的NinjectControllerFactory中

     ninjectKernel.Bind<IOrderProcessor>()
        .To<EmailOrderProcessor>()
        .WithConstructorArgument("settings", emailSettings);

IOrderProcessor-

   public interface IOrderProcessor
{
    void ProcessOrder(Cart cart, ShippingDetails shippingDetails);

    void SaveOrder(Cart cart, ShippingDetails shippingDetails);
}

EmailOrderProcessor-

   public void SaveOrder(Cart cart, ShippingDetails shippingInfo)
                {
                    Orders dbEntry = new Orders();

                        foreach (var line in cart.Lines)
                        {
                            dbEntry.ProductID = line.Product.ProductID;
                            dbEntry.Quantity = line.Quantity;
                            dbEntry.OrderTotal = line.Quantity * line.Product.Price;
                            dbEntry.Name = shippingInfo.Name;
                            dbEntry.Line1 = shippingInfo.Line1;
                            dbEntry.Line2 = shippingInfo.Line2;
                            dbEntry.Line3 = shippingInfo.Line3;
                            dbEntry.City = shippingInfo.City;
                            dbEntry.State = shippingInfo.State;
                            dbEntry.Zip = shippingInfo.Zip;
                            dbEntry.Country = shippingInfo.Country;
                            dbEntry.GiftWrap = shippingInfo.GiftWrap;

                            context.SaveChanges();
                        }
                     }

沒有崩潰,程序運行正常,我可以在EmailOrderProcessor中看到到達SaveOrder方法的值,但是數據庫中什么也沒出現。...我缺少什么? 保存到產品表時我沒有這個問題。 謝謝閱讀。

您需要放置

context.Orders.Add(dbEntry);

context.SaveChanges();之前context.SaveChanges(); 調用,否則它將永遠不會加載到DbContext中。

您還應該將dbEntry聲明放入foreach循環中。

您應該在循環的每次迭代中創建一個新訂單,並且不要將訂單添加到上下文中:

 foreach(var line in cart.Lines) {

     Orders dbEntry = new Orders();

     dbEntry.ProductID = line.Product.ProductID;
     dbEntry.Quantity = line.Quantity;
     dbEntry.OrderTotal = line.Quantity * line.Product.Price;
     dbEntry.Name = shippingInfo.Name;
     dbEntry.Line1 = shippingInfo.Line1;
     dbEntry.Line2 = shippingInfo.Line2;
     dbEntry.Line3 = shippingInfo.Line3;
     dbEntry.City = shippingInfo.City;
     dbEntry.State = shippingInfo.State;
     dbEntry.Zip = shippingInfo.Zip;
     dbEntry.Country = shippingInfo.Country;
     dbEntry.GiftWrap = shippingInfo.GiftWrap;

     context.Orders.Add(dbEntry);

 }

context.SaveChanges();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM