1

当我在控制器上运行创建操作时出现此错误:将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围”

这是我的域类:

public class MyEntity
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public DateTime DateAdded {get; set;}
}

在控制器“POST”创建动作我有这个:

[HttpPost]
public ActionResult Create(MyEntity entity)
{
     entity.Id = Guid.NewGuid();
     entity.DateAdded = DateTime.Now;
     // the name will be added from the view
     db.MyContext.Add(entity);
     db.Save(); 
}

我不确定 datatime2 来自哪里。

4

2 回答 2

1

实体框架在为 SQL Server 数据库建模时,会考虑所有类型的日期字段DateTime2

因此,如果在您的 SQL Server 数据库中,一个字段实际上定义为 a DateTime,那么当您将日期留空或指定另一个在 for 范围内DateTime2但超出 for范围的值时,您会遇到超出范围的问题DateTime。实体框架本身并没有发现这个问题,因为它只是假设DateTime2.

解决方案是检查您是否填写了所有日期字段的值并且它们在范围内。

于 2013-05-28T14:25:00.263 回答
0

我解决了这个问题。我忘记/看了看我有一个“DateChange”字段

这现在有效

public class MyEntity
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public DateTime DateAdded {get; set;}
    public DateTime DateChanged {get; set;}
}

在控制器“POST”创建动作我有这个:

[HttpPost]
public ActionResult Create(MyEntity entity)
{
     entity.Id = Guid.NewGuid();
     entity.DateAdded = DateTime.Now;
     entity.DateChanged = DateTime.Now;
     // the name will be added from the view
     db.MyContext.Add(entity);
     db.Save(); 
}

仍然不确定为什么它会转换 datetime2 错误。

于 2013-05-28T14:25:11.590 回答