2012-04-27 89 views
0

我有一個SQL列作爲int數據類型。ASP.NET實體框架更新SQL設置int值爲0

我想使用實體框架更新en條目,將其值設置爲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; 
+0

請任何代碼? – sarwar026 2012-04-27 16:50:57

+0

Snipet已添加,對不起 – Ianc22 2012-04-27 16:57:30

+0

請顯示'_tagsRepository.GetTagByName(TagName)'的定義。 – sarwar026 2012-04-27 17:08:57

回答

0

你不應該換你在你的方案中使用的語句DataContext。這樣做意味着您正在檢索一個context中的對象,並嘗試將現有對象保存在新的context中。這意味着當你試圖保存第二個context時,它不知道該對象已經存在於數據庫中。

+0

它工作時,只要我使用的值不是0,我檢查和修改名稱列以及設置計數列爲0和附加並運行ApplyCurrentValues它更新名稱,但Count列不受影響... – Ianc22 2012-04-29 13:43:41

0

我碰到了和你一樣的問題 - 除了0以外的其他值都可以正常工作。我們可以得到一些解決方案嗎?

編輯:經過一番研究,我找到了解決這個問題的方法。您必須修改這一行:

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

在存根對象,添加有問題的屬性(在你的情況計數),並將其值設置爲東西是永遠不可能在db,例如-2。通過這種方式,EF上下文也將比較附加對象的計數值並始終知道存在差異。所以你的線變成:

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

我不確定這是否每次都能正常工作,但現在看起來這樣做了。