实体框架将datetime设置为null或min

时间:2013-03-17 22:12:44

标签: sql entity-framework datetime

我正在使用Entity Framework 5,数据库优先。

我正在做我以前做过很多次的事情,但由于某些原因它没有用。

我的表定义为:

CREATE TABLE [dbo].[ActivationQueue](
[ID] [int] IDENTITY(1,1) NOT NULL,
[username] [nvarchar](255) NOT NULL,
[email] [nvarchar](255) NOT NULL,
[ActivationRequested] [datetime] NOT NULL,
[ActivationEmailSent] [datetime] NOT NULL,
[AccountActivated] [datetime] NOT NULL,
[ActivationAttempts] [int] NULL,
[ActivationKey] [uniqueidentifier] NULL,

CONSTRAINT [PK_Activations] PRIMARY KEY CLUSTERED

这是我用来检索特定行的代码:

ActivationQueue accountActivation = DbSet.FirstOrDefault(a => a.username.ToLower() == userName)

当我使用DbSet.FirstOrDefault()获取第一行时,ActivationEmailSent列始终返回SQLDateTime.MinValue(),即使它具有正确的值。 ActivationRequested列始终返回正确的值。

我使用过SQL分析器,当我运行下面的SQL时,我得到了正确的DateTime值。

exec sp_executesql N'SELECT TOP (1) 
[Extent1].[ID] AS [ID], 
[Extent1].[username] AS [username], 
[Extent1].[email] AS [email], 
[Extent1].[ActivationRequested] AS [ActivationRequested], 
[Extent1].[ActivationEmailSent] AS [ActivationEmailSent], 
[Extent1].[AccountActivated] AS [AccountActivated], 
[Extent1].[ActivationAttempts] AS [ActivationAttempts], 
[Extent1].[ActivationKey] AS [ActivationKey]
FROM [dbo].[ActivationQueue] AS [Extent1]
WHERE (LOWER([Extent1].[username])) = @p__linq__0',N'@p__linq__0         nvarchar(4000)',@p__linq__0=N'someusername'

让我感到惊讶的是,ActivationRequestedActivationEmailSent的映射与定义(我刚刚在edmx中使用updateModel)完全相同。但是ActivationRequested会返回正确的值,而ActivationEmailSent会返回SQLDateTime.Min1753-01-01 00:00:00.000

我不知道这是否有帮助,但是当我将列设置为可为空时,它只返回null。

1 个答案:

答案 0 :(得分:0)

为其他任何可能带来此问题的人找到了问题。

DateTime列的model.store属性将精度属性设置为,而实体将精度属性设置为< EM> 3

将精度属性更改为 none 以解决问题。

虽然我仍然感到困惑,为什么它首先适用于其中一个列,而不是另一个列,尽管它们具有相同的映射。