2012-02-16 7 views
1

ApplyCurrentValuesメソッドを使用して10進(19,4)非NULL可能フィールドをゼロ(0)に更新しようとすると、フィールドは更新されず、古い値を保持します。ゼロ以外の値はすべて更新されます。 null可能な属性を持つその他の小数フィールドもゼロに設定できます。Entity Framework 4 ApplyCurrentValuesがNULLにnull以外の10進数列を更新しない

使用したコードは以下の通りです:

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にアクセスできない場合があります。 ApplyCurrentValueselseステートメントでうまくいくようです。

クエリを使用してコンテキストからオブジェクトを検索し、変更を適用して保存することをお勧めします。

+0

エンティティには常にID(主キー)という名前の列がありますが、上記のコードは期待どおりに機能しますが、ゼロ以外の10進数の列はゼロに更新されません。 – serkanz

+0

nullを許可しないdoubleまたはfloatは同じ動作をしますか? –

+0

ダブルまたはフロートタイプでは試していませんでした。ところで、私が使用するとき の代わりに: var stub =新しいtblEntity(){ID = entity.ID}; _context.tblEntitySet.Attach(スタブ); 私が使用する: _context.tblEntitySet.Attach(_context.tblEntitySet.Single(s => s.ID == entity.ID)); すべてが期待通りに機能します。ところで、私は.NET Framework 3.5アプリケーションで消費されるWCFサービスでEF4を使用します。つまり、「切断された」モードとして機能すると言うことができます。 – serkanz

関連する問題