0

int データ型の SQL 列があります。

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

何か案は?

前もって感謝します

コード スニペット:

タグを追加 - タグ数を増やします:

  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;
4

2 に答える 2

0

DataContextシナリオで using ステートメントをラップしないでください。これを行うということは、オブジェクトを 1 つに取得しcontext、既存のオブジェクトを新しい に保存しようとしていることを意味しますcontext。これは、2 番目の に保存しようとしているときにcontext、オブジェクトがデータベースに既に存在することを認識していないことを意味します。

于 2012-04-29T11:48:03.587 に答える