2012-02-16 60 views
1

当我尝试使用ApplyCurrentValues方法将十进制(19,4)不可空字段更新为零(0)时,该字段不会更新并保留其旧值。除零之外的任何值都会更新。而其他带有空属性的小数字段也可以设置为零。实体框架4 ApplyCurrentValues不会更新不可空的十进制列为零

使用的代码如下:

public Int32 saveEntity(tblEntity entity) 
    { 
     using (conn) 
     { 
      Container _context = new Container(); 

      if (entity.ID != 0) 
      { 
       var stub = new tblEntity() { ID = entity.ID }; 
       _context.tblEntitySet.Attach(stub); 
       _context.tblEntitySet.ApplyCurrentValues(entity); 
      } 
      else 
      { 
       _context.tblEntitySet.AddObject(entity); 
      } 
      _context.SaveChanges(); 
      return entity.ID; 
     } 
    } 

回答

0

我不知道该ApplyCurrentValues方法可以像你用它来使用。据我所知,这种方法使用相同的实体密钥(link)将变化从分离的实体映射到附属实体

所以,你可能无法ApplyCurrentValues当你没有和entity.ID。看起来ApplyCurrentValues会在您的else声明中效果更好。

我会建议使用查询,应用更改然后保存查找上下文中的对象。

+0

实体始终有一个名为ID(主键)的列,上面的代码按预期方式工作,但只有不可空的十进制列不会更新为零。 – serkanz 2012-02-16 14:50:04

+0

不可为空的double或float是否创建相同的行为? – 2012-02-16 16:08:19

+0

我没有尝试它的双重或浮动类型。顺便说一句,当我使用 而不是: var stub = new tblEntity(){ID = entity.ID}; _context.tblEntitySet.Attach(stub); 当我使用: _context.tblEntitySet.Attach(_context.tblEntitySet.Single(s => s.ID == entity.ID)); 一切按预期工作。顺便说一下,我在使用.Net Framework 3.5应用程序使用的WCF服务中使用EF4。所以我们可以说它是作为“断开”模式工作的。 – serkanz 2012-02-16 19:28:12