更新是这样的:
using(DbContext ctx =new DbContext)
{
var entity = ctx.DbSet.Get(.....);
entity.Value = "sdfdsfdf";
ctx.SaveChanges();
}
我是这样的,是按着Pro ASP.NET MVC3 framework 的示例来做的,
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
context.SaveChanges();
}
@佛祖的木鱼: 你这个传入进来的 product 已经 detach 了。所以你得这样:
var entity = context.Products.FirstOrDefault(o=>product.Key == o.Key);
entity.Value = product.Value;
context.SaveChanges();
所以,我们建议ViewModel和Entity分离。
void SaveProduct(ProductViewModel product);
这样,你就无法写出你给出的代码了,同时,你也不会说保存不了。
@程序猿.码农: 谢谢你的回复
我改成这样
var entity = context.Products.FirstOrDefault(p => p.ProductID == product.ProductID);
entity.Name = product.Name;
是可以更新了,但没有办法一次更新吗?要不然我得一个个字段去单独更新啊
@佛祖的木鱼: 我就一示例,这样:
entity.Value1 = product.Value1;
entity.Value2 = product.Value2;
context.SaveChanges();
@佛祖的木鱼: 为了严谨,你需要这样:
var entity = context.Products.FirstOrDefault(p => p.ProductID == product.ProductID);
if(entity == null)
return View("错误的产品 ID 。");
木有什么错误提示么?
没有任何错误提示
using(DbContext ctx =new DbContext)
{
var entity = ctx.Prouduces.Find(produce.id);
if (entity!=null){
entity.Value = "sdfdsfdf";
ctx.SaveChanges();
}
}
对了,你加上断点,跟踪一下!
您好,可以更改实体的状态:
1 public void SaveProduct(Product product) 2 { 3 if (product.ProductID == 0) 4 { 5 context.Products.Add(product); 6 } 7 else 8 { 9 context.Entry<Product>(product).State = System.Data.EntityState.Modified; 10 } 11 context.SaveChanges(); 12 }