默認DateTime值爲了簡單起見,假設我有一個SQL Server CE表稱爲Widgets
:如何使用與SQL Server CE和Entity Framework
create table [Widgets] (
[Id] int not null primary key,
[Created] datetime not null default getdate())
插入,而不指定值的Created
列工作原理預計:
insert into [Widgets] ([Id]) values (1)
產生所謂Database
實體框架模型後,我寫下面的代碼:
Database db = new Database();
db.Widgets.AddObject(new Widget { Id = 2 });
db.SaveChanges();
但它引發了一個異常:An overflow occurred while converting to datetime.
我跟蹤下來的事實,EF看到Created
列作爲非可空DateTime
,所以當構建一個新Widget
,其Created
屬性被設置爲默認DateTime
(0001-01-01 12:00:00),這在SQL Server CE的有效範圍之外。
那麼,如何讓上面的C#示例工作?我不想更改數據庫模式。我知道我可以在Widget
的構造函數中將Created
屬性設置爲DateTime.Now
,但是從構建Widget
直到它實際插入到數據庫中(這是我想要捕獲的實際時間)爲止,可能需要幾分鐘的時間。
更新:我試着設置StoreGeneratedPattern
到Identity
和Computed
,但它提出了一個例外:Server-generated keys and server-generated values are not supported by SQL Server Compact
。默認值在SQL Server CE中起作用,所以它必須是實體框架的限制。 (顯然,這是固定在SQL Server CE 4.0。)
可能的重複http://stackoverflow.com/questions/6846952/disabling-entity-frameworks-default-value-generation-code-first – 2012-04-26 23:31:41
@TonyHopkinson該問題的答案不能滿足我的問題。如上一段所述,在構造函數中設置默認值不會調用正確的行爲。構建Widget的時間可能與實際插入數據庫的時間相距數分鐘。 – jordanbtucker 2012-04-26 23:38:05
相關問題:http://stackoverflow.com/questions/6237619/ef-4-1-how-to-add-a-default-on-insertion-for-datetime-column – devuxer 2012-04-27 00:35:29