gpt4 book ai didi

c# - 在 EF 6 中自动生成时间戳(代码优先): conversion of a datetime2 data type to a datetime data is an out-of-range value

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:11 25 4
gpt4 key购买 nike

我继承了一个类:

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


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

但是当我尝试持久化实例时(我没有设置 CreatedAt)它失败并出现错误:

{"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe 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();
}

就是这样。我从 here 中获取了这个示例.在那里查看更多详细信息。

关于c# - 在 EF 6 中自动生成时间戳(代码优先): conversion of a datetime2 data type to a datetime data is an out-of-range value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com