2014-07-04 84 views
1

我一直在使用MongoDB C#驅動程序,將一些文檔從我們當前的數據庫傳輸到MongoDB,另一種方式。我得到的問題是(簡而言之):雖然從MongoDB文檔中檢索DateTime的方法返回正確的日期/時間,但是當分配給我的C#對象的DateTime屬性時,它將恢復爲01/01/0001 12:00:00 AM,即分鐘DateTime值。C#(和MongoDB)DateTime轉換(從BSON到C#對象)

更多細節:

GetdateTime正在查詢的MongoDB(RDoc的是BSON文件),並返回正確的日期/時間:

Console.WriteLine(GetDateTime(rdoc, "recordedDate")); 

的輸出是:

2010年6月3日10:00:00 AM

我將返回的值賦給我的c#對象:

doc.RecordedDate = GetDateTime(rdoc, "recordedDate"); 

但是當我訪問使用該屬性(r是我的C#對象):

Console.WriteLine(r.UserID + "," + r.DateCreated); 

我得到: 123456,1/1/0001 12:00:00 AM

我設置我有日期時間字段:

set{ recordedDate = value.ToLocalTime(); } 

僅舉這裏創造C#文檔時,只要保持這些文件到內存中,我實際上沒有更新我們的數據庫,然後重新保存它們以蒙戈(不要問),只是FO r測試目的。它不應該影響我所遇到的問題,其他所有領域都可以正常工作。

我知道有BSON和.NET的datetime對象之間的一些missmatch(BSON截斷蜱或某事的數),但不這是否是引起了我的問題......

順便說一句,我纔開始使用c#三天前,所以如果我錯過了這裏基本和明顯的東西,請輕輕地指出:)。

回答

0

您似乎在存儲數據的方式之間存在不匹配。

這是更新的屬性doc.RecordedDate

doc.RecordedDate = GetDateTime(rdoc, "recordedDate"); 

但你是從屬性DateCreated閱讀:

Console.WriteLine(r.UserID + "," + r.DateCreated) 

,這是寫入第三個變量 'recordedDate':

set{ recordedDate = value.ToLocalTime(); } 

你正在寫一個名爲RecordedDate的東西,b從名爲DateCreated的東西讀取。你在哪裏更新DateCreated? doc.RecordedDate和r.DateCreated之間有什麼關係? recordedDate和doc.RecordedDate或r.DateCreated之間有什麼關係?

+0

就是這樣! (謝謝指出) 我的r對象的類繼承了一個包含DateCreated屬性的類,但那個從未設置過,所以我得到了最短日期值。 – Aineko