2014-05-01 88 views
0

我有一個類MyEntityDateTime? CreatedDate { get; set; }屬性。實體框架SaveChanges()不插入DateTime?當它被指定

所以我創造我的實體:

MyEntity e = new MyEntity { Id = 0, ..., CreatedDate = DateTime.Now }; 

db.MyEntities.Add(e); 
db.SaveChanges(); 

我看在數據庫和CreatedDate字段爲空。爲什麼?我在添加到上下文之前指定它!

在嘗試別人的建議CreatedDate = DateTime.Now as DateTime?;甚至CreatedDate = DateTime.Now as Nullable<DateTime>;相同的結果 - 插入爲空。

+2

請包括MyEntity類。您的CreatedDate字段是否已映射? –

+0

這裏沒有足夠的信息,因爲張貼這應該工作。 –

+0

需要更多代碼? class MyEntity {public DateTime? CreatedDate {get;設置;}}應該是足夠的吧? 「映射」是什麼意思?我認爲它會自動遷移到具有相同列名的數據庫。 –

回答

0

CreatedDate = DateTime.Now.Date

設置createddate如日期

+0

爲什麼會更好? –

+0

許多教程告訴我們在不解釋的情況下做到這一點。所有這些都會讓時間凌晨12:00。該應用程序可能不關心時間,這將工作,但一些應用程序很在意。 –

+0

好的,但你的工作完成與否。 –

1

可能的問題是在第一行代碼你宣佈一個新的類類型的實體,而不是myEntity所的?

嘗試..

MyEntity e = new MyEntity { Id = 0, ..., CreatedDate = DateTime.Now }; 

db.MyEntities.Add(e); 
db.SaveChanges(); 
+0

好的,很好的錯字捕捉,但它仍然不保存CreatedDate。 –

0

我沒有告訴你們前面,但我已經裝修的DateTime? CreatedDate與[DatabaseGenerated(DatabaseGeneratedOption.Computed)],我認爲沒有受到影響創建或更新。

如果我有這個屬性,任何in-C#努力設置CreateDate將導致null。要解決空問題,我必須轉到Configuration.cs和write c => c.DateTime(defaultSqlValue: "GETDATE()")到相應的列定義。照顧這個問題。

另外,我可以擺脫註釋,而不是觸摸Configuration.cs文件。

+0

這肯定會影響創建和更新。您告訴EF,該值不會由您設置,但會由數據庫生成。 –

+0

_「我之前沒有告訴過你們,但是我已經用[DatabaseGenerated(DatabaseGeneratedOption.Computed)]修飾了DateTime?CreatedDate ...]」 - 這就是爲什麼_「需要更多代碼」的原因。 :) – Mrchief

+0

當我們剛剛學習時,我們並不總是知道「需要展示什麼代碼」。不得不這樣引用我是不必要的粗糙。 –

0

在創建實體實例並檢查屬性後設置斷點。是否正確設置了CreatedDate?

+0

我在db.SaveChanges()之前設置了斷點,事實上,當它到達數據庫時,CreatedDate爲null。我找出了什麼是錯的。我已經宣佈了一個旨在無視任何代碼中的CreatedDate設置的註釋。 –