我正在使用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'
让我感到惊讶的是,ActivationRequested
和ActivationEmailSent
的映射与定义(我刚刚在edmx中使用updateModel
)完全相同。但是ActivationRequested
会返回正确的值,而ActivationEmailSent
会返回SQLDateTime.Min
(1753-01-01 00:00:00.000
)
我不知道这是否有帮助,但是当我将列设置为可为空时,它只返回null。
答案 0 :(得分:0)
为其他任何可能带来此问题的人找到了问题。
DateTime列的model.store属性将精度属性设置为无,而实体将精度属性设置为< EM> 3
将精度属性更改为 none 以解决问题。
虽然我仍然感到困惑,为什么它首先适用于其中一个列,而不是另一个列,尽管它们具有相同的映射。