在 EF 6 中自动生成时间戳(代码优先):将 datetime2 数据类型转换为日期时间数据是超出范围的值



我有一个从这里继承的类:

 public abstract class BaseEntity 
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime CreatedAt { get; set; }
}

但是当我尝试persis实例(我没有设置CreatedAt)时,它失败并显示错误:

{"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.rnThe statement has been terminated."}

我做错了什么?

首先创建一个基本实体:

public class Student: BaseEntity
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
}
public class BaseEntity{ 
    public DateTime CreatedDate { get; set; }
    public DateTime UpdatedDate { get; set; }    
}

然后在数据库上下文中覆盖 SaveChanges() 方法。

public override int SaveChanges()
{
    var entries = ChangeTracker
        .Entries()
        .Where(e => e.Entity is BaseEntity && (
                e.State == EntityState.Added
                || e.State == EntityState.Modified));
    foreach (var entityEntry in entries)
    {
        ((BaseEntity)entityEntry.Entity).UpdatedDate = DateTime.Now;
        if (entityEntry.State == EntityState.Added)
        {
            ((BaseEntity)entityEntry.Entity).CreatedDate = DateTime.Now;
        }
    }
    return base.SaveChanges();
}

就是这样。我从这里举了这个例子。查看那里以获取更多详细信息。

这是因为SQL具有不同的日期范围,只需添加此注释,即可删除错误消息:

[Column(TypeName="datetime2")]

最新更新