我有一个5列的数据表,其中一行被数据填充,然后通过事务保存到数据库。
保存时,返回一个错误:
将datetime2数据类型转换为datetime数据类型会导致值超出范围
它暗示,正如阅读,我的数据表有一个类型的DateTime2和我的数据库一个DateTime;这是错误的。
date列设置为DateTime,如下所示:
新数据专栏(“myDate, Type.GetType”)
问题
是否可以在代码中解决这个问题,或者是否必须在数据库级别上更改某些内容?
我有一个5列的数据表,其中一行被数据填充,然后通过事务保存到数据库。
保存时,返回一个错误:
将datetime2数据类型转换为datetime数据类型会导致值超出范围
它暗示,正如阅读,我的数据表有一个类型的DateTime2和我的数据库一个DateTime;这是错误的。
date列设置为DateTime,如下所示:
新数据专栏(“myDate, Type.GetType”)
问题
是否可以在代码中解决这个问题,或者是否必须在数据库级别上更改某些内容?
当前回答
Code First上下文:
从这里开始
public DateTime Created { get; set; }
这个。添加[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime Created { get; set; }
在你的模型中。
一定要把这个也加到最上面
using System.ComponentModel.DataAnnotations.Schema;
其他回答
我遇到了这个问题,并将以下内容添加到我的datetime属性中:
[Column(TypeName = "datetime2")]
public DateTime? NullableDateTimePropUtc { get; set; }
已经有很多好的答案了。我想展示一种使用实体框架core fluent api来解决这个问题的方法。 大多数情况下,错误发生在默认情况下生成DateTime值时,因此您需要覆盖DataContext中的OnModelCreating,并在您的特定实体的属性中手动添加默认值,以便EF能够正确地转换到数据库,如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(entity =>
{
entity.ToTable("MyTable");
entity.Property(e => e.MyColumnDateTime)
.HasDefaultValueSql("GETDATE()");
});
OnModelCreatingPartial(modelBuilder);
}
我发现这篇文章试图弄清楚为什么我总是得到以下错误,这是由其他答案解释的。
将datetime2数据类型转换为datetime数据类型会导致值超出范围。
使用可空的DateTime对象。 公共DateTime ?PurchaseDate{获取;设置;}
如果你使用实体框架 将edmx文件中的nullable属性设置为True
对我来说,我有一个Devexpress DateEdit组件,它通过nullable model属性绑定到可空的datetime MSSQL列。我所要做的就是在DateEdit上设置AllowNullInput = True。将其设置为“默认”会导致日期1.1.0001出现-仅在离开DateEdit之前-然后由于上面提到的后续指示,我得到了此转换错误消息。
对我来说,这是因为约会时间是…
01/01/0001 00:00:00
在这种情况下,你想要分配null给你EF DateTime对象…以我的FirstYearRegistered代码为例
DateTime FirstYearRegistered = Convert.ToDateTime(Collection["FirstYearRegistered"]);
if (FirstYearRegistered != DateTime.MinValue)
{
vehicleData.DateFirstReg = FirstYearRegistered;
}