繁体   English   中英

在实体框架中使用TimeSpan时,“ Datetime2到Datetime导致超出范围的值”

[英]'Datetime2 to a Datetime resulted in out-of-range value' when using TimeSpan with Entity Framework

我的SQL Server数据库中有一个表,其中包含几个time(7) (允许NULLS)列。 我的应用程序使用实体框架将实体存储在数据库中。

我将Nullable<TimeSpan>用作与SQL Server数据库中的“允许NULLS time(7)”相对应的数据类型。 在添加具有TimeSpan?的实体后执行SaveChanges() TimeSpan? 列,它抛出一个ListInternalException说众所周知的

“将datetime2数据类型转换为datetime数据类型导致值超出范围。”

我之前已经遇到过此异常,并且知道这是因为.Net datetime mi值低于SqlDateTime.MinValue 但是在这里,我们没有可追溯的日期。 此外,我的属性和列类型为Nullable,并且当我将属性设置为Null时,异常仍然存在。

有什么建议如何解决这个问题?

CREATE TABLE [dbo].[MyEntity]
(
    [Id] [uniqueidentifier] NOT NULL,
    [AssociationId] [uniqueidentifier] NOT NULL,
    [IsMondayDayOff] [bit] NOT NULL,
    [IsTuesdayDayOff] [bit] NOT NULL,
    [IsWednessdayDayOff] [bit] NOT NULL,
    [IsThursdayDayOff] [bit] NOT NULL,
    [IsFridayDayOff] [bit] NOT NULL,
    [IsSaturdayDayOff] [bit] NOT NULL,
    [IsSundayDayOff] [bit] NOT NULL,
    [MondayFrom] [time](7) NULL,
    [TuesdayFrom] [time](7) NULL,
    [WednesdayFrom] [time](7) NULL,
    [ThursdayFrom] [time](7) NULL,
    [FridayFrom] [time](7) NULL,
    [SaturdayFrom] [time](7) NULL,
    [SundayFrom] [time](7) NULL,
    [MondayTo] [time](7) NULL,
    [TuesdayTo] [time](7) NULL,
    [WednessdayTo] [time](7) NULL,
    [ThursdayTo] [time](7) NULL,
    [FridayTo] [time](7) NULL,
    [SaturdayTo] [time](7) NULL,
    [SundayTo] [time](7) NULL,

    CONSTRAINT [PK_MyEntity] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[PK_MyEntity] WITH CHECK 
    ADD CONSTRAINT [FK_PK_MyEntity_PK_MyAssociation] 
    FOREIGN KEY([FBOId]) REFERENCES [dbo].[MyAssociation] ([Id])
GO

ALTER TABLE [dbo].[MyEntity] CHECK CONSTRAINT [FK_MyEntity_MyAssociation]
GO

我的实体:

public class MyEntity 
{
    public Guid Id { get; set; }
    public Guid OtherTableId { get; set; }

    public bool IsMondayDayOff { get; set; }
    public TimeSpan? MondayFrom { get; set; }
    public TimeSpan? MondayTo { get; set; }

    public bool IsTuesdayDayOff { get; set; }
    public TimeSpan? TuesdayFrom { get; set; }
    public TimeSpan? TuesdayTo { get; set; }

    public bool WednesdayOff { get; set; }
    public TimeSpan? WednesdayFrom { get; set; }
    public TimeSpan? WednesdayTo { get; set; }

    public bool ThursdayOff { get; set; }
    public TimeSpan? ThursdayFrom { get; set; }
    public TimeSpan? ThursdayTo { get; set; }

    public bool FridayOff { get; set; }
    public TimeSpan? FridayFrom { get; set; }
    public TimeSpan? FridayTo { get; set; }

    public bool SaturdayOff { get; set; }
    public TimeSpan? SaturdayFrom { get; set; }
    public TimeSpan? SaturdayTo { get; set; }

    public bool SundayOff { get; set; }
    public TimeSpan? SundayFrom { get; set; }
    public TimeSpan? SundayTo { get; set; }

    public virtual AnotherEntity Association  { get; set; }
}

实际的问题不是EF如何处理time(7)和TimeSpan数据类型,而是MyEntity的第二级关联(关联的关联)具有datetime2列,在将实体添加到数据库时未提供。 按照注释中的@sepupic建议使用SQL Server Profiler查找它。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM