entity framework代码第一个DateTime字段更新修改
我有以下实体:
public class User { public int UserId { get; set; } public string UserName { get; set; } public string UserAddress { get; set; } public DateTime CreateDate { get; set; } public DateTime? UpdateDate { get; set; } }
如何使User
实体的UpdateDate
字段成为更新时的服务器DateTime
? 也就是说,每当数据库中的实体被修改时, UpdateDate
字段就会更改为确切的日期和时间,以及是否要说UpdateDate = new DateTime(Datetime.Now.Ticks)
首先,如果要存储本地时间,请考虑DateTimeOffset
是更好的选择。 或者,您可以使用基于UTC的DateTime
,但我将在此示例中显示DateTimeOffset
。 切勿为此目的存储基于本地的DateTime
,因为您将遇到时区和夏令时问题。 另请参阅: 针对DateTime.Now的案例 。
接下来,考虑一个通用接口,您可以将其用于要跟踪创建/更新值的实体。
public interface IDatedEntity { DateTimeOffset Created { get; set; } DateTimeOffset Updated { get; set; } }
将该接口及其属性应用于您正在使用的实体。
public class User : IDatedEntity { // ... public DateTimeOffset Created { get; set; } public DateTimeOffset Updated { get; set; } }
现在,在数据库上下文中,您可以附加到SavingChanges
事件并应用所需的行为:
public class MyContext : DbContext { public DbSet Users { get; set; } public MyContext() { var objectContext = ((IObjectContextAdapter)this).ObjectContext; objectContext.SavingChanges += (sender, args) => { var now = DateTimeOffset.Now; foreach (var entry in this.ChangeTracker.Entries()) { var entity = entry.Entity; switch (entry.State) { case EntityState.Added: entity.Created = now; entity.Updated = now; break; case EntityState.Modified: entity.Updated = now; break; } } this.ChangeTracker.DetectChanges(); }; } }
请注意最终调用DetectChanges
,这将确保将新更新的日期值应用于所有已修改的实体。
您只能通过迁移执行此操作。 将UpdateDate属性的defaultSqlValue参数设置为“GETDATE()”或“GETUTCDATE()”,当您修改或添加新实体时,您需要将其值设置为null。
上述就是C#学习教程:entity framework代码第一个DateTime字段更新修改分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004595.html