2011-03-30 62 views
3

ExamVersion類有一個int?屬性命名SourceSafeVersionNum爲什麼這個LINQ查詢從數據庫中爲NULL賦值1?

當我執行下面的代碼:

var query = from examVersion in db.ExamVersions 
      where examVersion.ExamVersionID == ExamVersionID 
      select examVersion; 

foreach (ExamVersion examVer in query.ToList()) 
{ 
    yield return examVer; 
} 

examVer.SourceSafeVersionNum設置爲1,即使它是在數據庫NULL

當我運行在SQL Server通過LINQ生成的SQL代碼時,SourceSafeVersionNum列的值是NULL(如我期望的),但在foreach循環的examVer.SourceSafeVersionNum1

我找不到代碼中分配了默認值或任何類似邏輯的任何地方。

任何想法爲什麼/在哪裏這個值被設置爲1

這裏是財產申報(由.dbml文件生成)

[Column(Storage="_SourceSafeVersionNum", DbType="Int", UpdateCheck=UpdateCheck.Never)] 
public System.Nullable<int> SourceSafeVersionNum 
{ 
    get 
    { 
     return this._SourceSafeVersionNum; 
    } 
    set 
    { 
     if ((this._SourceSafeVersionNum != value)) 
     { 
      this.OnSourceSafeVersionNumChanging(value); 
      this.SendPropertyChanging(); 
      this._SourceSafeVersionNum = value; 
      this.SendPropertyChanged("SourceSafeVersionNum"); 
      this.OnSourceSafeVersionNumChanged(); 
     } 
    } 
} 
+2

你可以發佈'SourceSafeVersionNum'的聲明(以及它之前的屬性)嗎? – Gabe 2011-03-30 15:34:14

+1

出於興趣,你爲什麼*急於*強迫結果進入列表,然後使用收益率?任何不僅僅是返回列表的原因,還是使用返回'list.Select(x => x)'來避免客戶端能夠修改列表? – 2011-03-30 15:44:03

+0

我問自己同樣的問題。只是昨天繼承了這個代碼。 – Jason 2011-03-30 15:50:39

回答

2

您是否嘗試過在財產set{}方法,看看還有什麼可以被填充它的值設置斷點?您可能會在行爲中發現罪魁禍首,然後查看Call Stack以查看其身份。

+0

我正在遵循這一思路。我認爲這是不同的足以保證一個新的問題:http://stackoverflow.com/questions/5489230/when-is-the-value-of-a-property-set-after-a-linq-expression-is-評估 – Jason 2011-03-30 17:12:15

+0

爲這個想法投了贊成票。不幸的是,Call Stack跳過了相關的代碼,只列出了[External Code]。 – Jason 2011-03-30 17:54:23

0

作爲後續行動這一點,這裏是發生了什麼事:

所檢索從數據庫中值的代碼是被稱爲兩次,但通過兩個不同的代碼路徑。調試器正在分配正在分配值1的代碼路徑,所以我沒有看到它。

相關問題