首页 新闻 会员 周边

用EF4的CODE FIRST 的SaveChanges 无法更新

0
悬赏园豆:5 [待解决问题]

可以插入新数据,可以删除数据,但就是没有办法更新现有的数据,,

 

请高手帮忙回答

佛祖的木鱼的主页 佛祖的木鱼 | 初学一级 | 园豆:197
提问于:2012-07-26 17:32
< >
分享
所有回答(4)
0

更新是这样的:

using(DbContext ctx =new DbContext)

{

   var entity = ctx.DbSet.Get(.....);

   entity.Value = "sdfdsfdf";

   ctx.SaveChanges();
}

Launcher | 园豆:45045 (高人七级) | 2012-07-26 17:34

我是这样的,是按着Pro ASP.NET MVC3 framework 的示例来做的,

 

        public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            context.SaveChanges();
        }

支持(0) 反对(0) 佛祖的木鱼 | 园豆:197 (初学一级) | 2012-07-26 17:38

@佛祖的木鱼: 你这个传入进来的 product 已经 detach 了。所以你得这样:

var entity = context.Products.FirstOrDefault(o=>product.Key == o.Key);

entity.Value = product.Value;

context.SaveChanges();

所以,我们建议ViewModel和Entity分离。

void SaveProduct(ProductViewModel product);

这样,你就无法写出你给出的代码了,同时,你也不会说保存不了。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-07-26 17:44

@程序猿.码农: 谢谢你的回复

我改成这样

 var entity = context.Products.FirstOrDefault(p => p.ProductID == product.ProductID);
                entity.Name = product.Name;

 

是可以更新了,但没有办法一次更新吗?要不然我得一个个字段去单独更新啊

支持(0) 反对(0) 佛祖的木鱼 | 园豆:197 (初学一级) | 2012-07-26 17:55

@佛祖的木鱼: 我就一示例,这样:

entity.Value1 = product.Value1;

entity.Value2 = product.Value2;

context.SaveChanges();

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-07-26 18:00

@佛祖的木鱼: 为了严谨,你需要这样:

var entity = context.Products.FirstOrDefault(p => p.ProductID == product.ProductID);

if(entity == null)

return View("错误的产品 ID 。");

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-07-26 18:01
0

木有什么错误提示么?

wdwwtzy | 园豆:114 (初学一级) | 2012-07-26 17:42

没有任何错误提示

支持(0) 反对(0) 佛祖的木鱼 | 园豆:197 (初学一级) | 2012-07-26 17:43
0

using(DbContext ctx =new DbContext)

{

   var entity = ctx.Prouduces.Find(produce.id);

 

 if (entity!=null){

     entity.Value = "sdfdsfdf";

     ctx.SaveChanges();

  }

}

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-07-27 10:03

对了,你加上断点,跟踪一下!

支持(0) 反对(0) jerry-Tom | 园豆:4077 (老鸟四级) | 2012-07-27 10:04
0

您好,可以更改实体的状态:

 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   }
给时光以生命18 | 园豆:192 (初学一级) | 2012-12-26 16:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册