实体框架无法保存 - 将日期时间 2 转换为日期时间失败

本文关键字:日期 时间 失败 转换 框架 保存 实体 | 更新日期: 2023-09-27 18:31:25

我遇到了一个问题,我的一些实体框架实体无法保存数据。我得到的错误是

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value

我有一张名为"笔记"的表格。它有一个名为"NoteDateTime"的日期时间字段。下面是用于创建表的 SQL 片段。如您所见,NoteDateTime 字段没有任何异常。

CREATE TABLE [db].[Notes](
    [NoteID] [int] IDENTITY(1,1) NOT NULL,
    [NoteText] [varchar](8000) NULL,
    [NoteDateTime] [datetime] NULL,
    [IsReviewRequired] [bit] NULL,
    [ConvertToGlobal] [bit] NULL,
    [EmployeeID] [int] NULL,
    [EvaluationID] [int] NULL,
    [CustomerID] [int] NULL,
    [EmailID] [int] NULL,
    [AddedWhenMerged] [bit] NULL,
CONSTRAINT [PK_Notes] PRIMARY KEY CLUSTERED 
(
    [NoteID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

在我的 C# 代码中,我填充了一个"Notes"实体并调用 SaveChanges() 方法。当我调用 SaveChanges() 时会发生错误。

dbContext.Notes.Add(new Note
{
    EvaluationID = evaluationId,
    CustomerID   = customerId,
    EmployeeID   = employeeId,
    NoteDateTime = DateTime.Now,
    NoteText     = noteText,
});
dbContext.SaveChanges();

我已经阅读了几个堆栈溢出线程,建议是确保使用正确的日期并且日期不应为空。该日期不为空,并且肯定在可接受的最小/最大限制范围内。我还尝试将数据库中的列类型转换为 datetime2,但这并没有解决问题。奇怪的是,这似乎是最近的一个问题。我能想到的在我们的环境中发生的变化是,我们将项目迁移到了MVC 4。

如何解决此问题并正确保存我的 Note 实体?

实体框架无法保存 - 将日期时间 2 转换为日期时间失败

Julie Lerhman在这里讨论了这个确切的问题(http://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Entity-Framework-Tips-and-Tricks),相信我,她是专家。

我自己,我会像这样在你的代码中使 [NoteDateTime] 为空

public DateTime? NoteDateTime { set; get; }

由于您尚未提及,请使用 Sql 探查器查看发送到服务器的 SQL。尝试手动运行 sql,看看返回了什么错误。