.net - EF Core ChangeTracker:仅在 db 中设置 CreatedAt 字段
问题描述
我正在使用 ChangeTracker 来更新所有实体的日期。在我的情况下,字段“CreatedAt”仅在数据库中设置。我还运行了调试模式,并且设置了两个属性。当我运行 SaveChangesAsync 时,数据库中的 ModifiedAt 仍然为空。在更新时,“已修改”字段也未设置。
你能看到我做错了什么吗?
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
var entries = ChangeTracker.Entries().Where(e => e.Entity is DateTimeInformation
&& (e.State == EntityState.Added
|| e.State == EntityState.Modified));
foreach (var entityEntry in entries)
{
((DateTimeInformation) entityEntry.Entity).ModifiedAt = DateTime.Now;
if (entityEntry.State == EntityState.Added)
{
((DateTimeInformation)entityEntry.Entity).CreatedAt = DateTime.Now;
}
}
return base.SaveChangesAsync();
}
我的日期时间类:
public abstract record DateTimeInformation
{
public DateTime? CreatedAt { get; set; }
public DateTime? ModifiedAt { get; set; }
}
我的配置
public class TextEntityConfiguration : IEntityTypeConfiguration<PrePostText>
{
public void Configure(EntityTypeBuilder<PrePostText> builder)
{
builder.HasKey(c => c.Id);
builder.Property(c => c.Id).ValueGeneratedOnAdd();
builder.Property(ci => ci.CreatedAt).ValueGeneratedOnAdd();
builder.Property(ci => ci.ModifiedAt).ValueGeneratedOnAddOrUpdate();
builder.Property(c => c.Name).HasMaxLength(50).IsRequired();
builder.Property(c => c.Type).IsRequired();
builder.Property(c => c.Content).HasMaxLength(512).IsRequired();
}
}
解决方案
好的,我自己找到了解决方案 :) 当您使用 e DatabaseGenerated 属性时,您只需要 ValueGeneratedOnAdd。就我而言,我不使用它,因为我覆盖了 SaveChangesAsync。
推荐阅读
- c# - 具有重复方法时的 Neaten 类声明 c#
- html - 小屏幕导航栏固定顶部下方元素的动态填充
- mongodb - MongoDB 查询 hashmap 对象
- javascript - 如何在 Dojo Toolkit 中为带有按钮的工具栏定义 Widget 类?
- java - Path.toFile() 和 new File(pathString) 的不同行为
- java - Eclipse 在 mvn eclipse:clean 之后缺少 tomcat 的运行配置
- raster - 由 geoserver 作为 WMS 服务的裁剪/过滤栅格
- ajax - Wordpress Ajax 504(网关超时)
- jni4net - Javonet的性能
- python - Cerberus 自定义规范化规则