我在我的asp.net mvc应用中使用EF Code First。 这是我的代码:
Request.RequestDate = DateTime.Now;
我数据库中的RequestDate类型是datetime。使用上述代码时出现了以下错误:
将datetime2数据类型转换为datetime数据类型导致数值超出范围。
请帮帮我,谢谢。
我在我的asp.net mvc应用中使用EF Code First。 这是我的代码:
Request.RequestDate = DateTime.Now;
我数据库中的RequestDate类型是datetime。使用上述代码时出现了以下错误:
将datetime2数据类型转换为datetime数据类型导致数值超出范围。
请帮帮我,谢谢。
编辑:
如何使用DbContext和SetInitializer修复datetime2超出范围转换错误?
问题在于您正在尝试保存一个无法适应SQL datetime列的值。这里给出的答案将阻止转换失败。
或者在您的数据库中将列更改为datetime2类型。我不确定为什么它们的“代码优先”生成datetime列而不是datetime2。
以下示例可以将您的Datetime列显式映射到SQL中的datetime2。
从我的角度来看,问题出在日期时间类型的字段没有设置为可空类型,有时候在构造函数中没有初始化该字段。我通过将该字段设置为可空类型来解决了这个问题。
public DateTime? MyDate { get; set; }
另一种解决方案是在构造函数中无论如何都初始化该字段。
--in your sql script:
create table tablename(mydate DateTime not null default GETDATE())
//in your c# object:
public class tablename
{
public string mydate {get; set; } = null;
}
//in your C# method using EF:
private async Task mymethod()
{
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
dbContext.tablename.add(new tablenam{mydate = sqlFormattedDate });
await dbContext.SaveChangesAsync();
}