2012-04-27 3 views
0

私はint型のデータ型としてSQLの列を持っています。ASP.NETエンティティフレームワークの更新SQLのint値を0に設定

Entity Frameworkを使用してエントリを更新しようとしていますが、値を0に設定しても更新されません。私はまた、変更を送信中にエラーが発生しない...奇数。私はタグ名を変更し、カウントを0に設定したが、名前は更新されたが、カウントは変更されなかった。

アイデア?事前に

おかげ

コードSnipet:

タグを追加 - タグ・カウントアップ:

Tag tag = _tagsRepository.GetTagByName(TagName); 
    if (tag == null) 
    { 
     tag = new Tag(); 
     tag.CreateDate = DateTime.Now; 
     tag.Name = TagName; 
     tag.Count = 1; 
    } 
    else 
    { 
     tag.Count += 1; 
    } 
    tag = _tagsRepository.SaveTag(tag); 

削除タグを項目から、タグ数

Tag tag = _tagsRepository.GetTagByName(TagName); 
    if (tag != null) 
    { 
     tag.Count -= 1; 
    } 
    tag = _tagsRepository.SaveTag(tag); 

を更新GetTagByNameメソッド

public Tag GetTagByName(string Name) 
    { 
     Tag result = null; 
     using (ISADataContext dc = conn.GetContext()) 
     { 
      result = dc.Tags.Where(t => t.Name == Name).FirstOrDefault(); 
     } 
     return result; 
    } 

SaveTag方法

public Tag SaveTag(Tag tag) 
{ 
    using (ISADataContext dc = conn.GetContext()) 
    { 
     if (tag.TagID > 0) 
     { 
      dc.Tags.Attach(new Tag { TagID = tag.TagID }); 
      dc.Tags.ApplyCurrentValues(tag); 
     } 
     else 
     { 
      dc.Tags.AddObject(tag); 
     } 
     dc.SaveChanges(); 
    } 
    return tag; 
} 

回避策:

using (ISADataContext dc = conn.GetContext()) 
{ 
    if (tag.TagID > 0) 
    { 
     if (tag.Count == 0) 
     { 
      Tag t = dc.Tags.Where(tt=> tt.TagID == tag.TagID).First(); 
      t.Count = 0; 
     } 
     else 
     { 
      dc.Tags.Attach(new Tag { TagID = tag.TagID }); 
      dc.Tags.ApplyCurrentValues(tag); 
     } 
    } 
    else 
    { 
     dc.Tags.AddObject(tag); 
    } 
    dc.SaveChanges(); 
} 
return tag; 
+0

任意のコードを入力してください。 – sarwar026

+0

スニペット追加、申し訳ありません – Ianc22

+0

'_tagsRepository.GetTagByName(TagName)'の定義を表示してください。 – sarwar026

答えて

0

あなたのシナリオでステートメントを使用して、あなたのDataContextをラップべきではありません。これは、contextのオブジェクトを取得していて、既存のオブジェクトを新しいcontextに保存しようとしていることを意味します。これは、2番目のcontextに保存しようとしているときに、オブジェクトがデータベースにすでに存在していることを知らないことを意味します。

+0

これは、0以外の値を使用したときはいつでも動作し、名前列を変更してCount列を0に設定し、ApplyCurrentValuesをアタッチして実行するとNameを更新しますが、Count列は影響を受けません。 – Ianc22

0

私はあなたと同じ問題に遭遇しました.0を除くすべての値は正常です。私たちはこれにいくつかの解決策を得ることができますか?

編集:いくつかの調査の後、私はこれを修正する方法を見つけました。あなたは、この行変更する必要があります。たとえば、(あなたのケースのカウントで)問題のプロパティを追加し、デシベルで可能になることはありません何かにその値を設定し、スタブオブジェクトで

dc.Tags.Attach(new Tag { TagID = tag.TagID }); 

を-2。このようにして、EFコンテキストは添付オブジェクトのカウント値も比較し、差異があることを常に認識します。あなたの行は次のようになります:

dc.Tags.Attach(new Tag { TagID = tag.TagID, Count = -2 }); 

いつもうまくいくかどうかはわかりませんが、今のところはうまくいきます。

関連する問題