我有一个从这里继承的类:
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")]