![](/img/trans.png)
[英]FormsAuthentication won't save UserData in default MVC4 Web Application template
[英]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.