我一直在阅读并关注 Freeman A. 和 Sanderson S. 所著的“Pro ASP.Net MVC3 Framework 第三版”一书。
我已经到了他们告诉我如何更新实体的部分。一切正常,除了更新。
我有一个页面可以编辑商店中的商品。很基本。当我更改页面中的值并提交它们时,它们会以应有的方式使用新值到达我的存储库的实现。
现在,这本书在我的存储库(SaveProduct)中向我展示了以下方法:
namespace SportsStore.Domain.Concrete
{
public class EFProductRepository : IProductRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products
{
get { return context.Products; }
}
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
context.SaveChanges();
}
}
}
此方法有效,但它不保存我的产品。我没有完全理解 MVC3 的模糊性,所以我被困住了。产品作为参数到达 SaveProduct 方法,具有正确的值,应该被保存,但上下文没有更新。
这是在 MVC3 中更新的东西吗?(这本书是不是有点过时了?)因为我可以用 if's 编码来分别检查所有的值,但我不禁觉得这取消了 MVC3/Entity Framework 的功能。
谁能帮帮我?非常感谢!:) 与此同时,我将调试并寻找任何线索!
编辑:
当我捕获 SaveChanges() 返回的整数时,它似乎为零。所以我猜想具有新值的实体没有“更新”到实体框架。
编辑2:
我发现了问题(已经)。似乎我问得太快了,对此我深表歉意。这是我所做的:
我将以下代码添加到方法 SaveProduct 中:
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
else
{
var productInDb = context.Products.FirstOrDefault(x => x.ProductID == product.ProductID);
context.Entry(productInDb).CurrentValues.SetValues(product);
}
context.SaveChanges();
}
我想这是一种正确的方法吗?对不起这个无用的问题:)