gpt4 book ai didi

c# - 如何自动设置 DateCreated 和 DateUpdated

转载 作者:太空狗 更新时间:2023-10-30 00:52:19 24 4
gpt4 key购买 nike

如果我有以下实体:

public class PocoWithDates {
public string PocoName { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateUpdated { get; set; }
}

对应于具有相同名称/属性的 SQL Server 2008 (R2) 表...

我怎样才能自动:- 在执行 INSERT 时将 DateCreatedDateUpdated 字段设置为现在- 在执行更新时将 DateUpdated 字段设置为现在

当我自动说时,我的意思是我希望能够做到这一点:

poco.Name = "Changing the name";
repository.Save();

不是这个:

poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();

在幕后,“某物”应该自动更新 DateTime 字段。那个“东西”是什么?我正在使用 Entity Framework 6.0。有没有一种方法可以让 EF 自动执行此操作?我知道 MySQL 可以做这样的事情。或者在 SQL Server 中使用触发器/存储过程。但我不想要那样。

这个问题是这个问题的替代和修改版本: Entity Framework/SQL2008 - How to Automatically Update LastModified fields for Entities?

这个问题为 EF 4.0 提供了一些很好的解决方案/答案。但我希望它用于带有 DBContext 的 EF6.0。如果我有更多时间,我会尝试调整这些解决方案并让它们在 EF6.0 中工作。但现在我想知道是否有人已经解决了这个问题,或者知道如何将 EF4.0 的自定义 SaveChanges()Add() 覆盖转录到 EF6.0 .

最佳答案

您可以覆盖 DbContext 上的 SaveChanges() 方法以更新 Save() 上的 DateUpdated 值。我会实现一个接口(interface)来允许更新某些项目,而其他项目则不允许。

public interface IEntityAutoDateFields
{
DateTime DateCreated { get; set; }
DateTime DateUpdated { get; set; }
}

然后:

public class PocoWithDates : IEntityAutoDateFields
{
public PocoWithDates()
{

}

public DateTime DateCreated { get; set; }
public DateTime DateUpdated { get; set; }
}

在您的上下文中:

public PocoWithDatesContext : DbContext
{
public DbSet<PocoWithDates> PocoWithDatesSet { get; set;}

public override int SaveChanges()
{
var now = DateTime.Now;

this.ChangeTracker.DetectChanges();
foreach (var item in this.ChangeTracker.Entries()
.Where(i => i.State == EntityState.Added || i.State == EntityState.Modified)
.Where(i => i as IEntityAutoDateFields != null))
{
if (item.State == EntityState.Added)
{
(item as IEntityAutoDateFields).DateCreated = now;
}
(item as IEntityAutoDateFields).DateUpdated = now;
}
// Call the SaveChanges method on the context;
return base.SaveChanges();
}
}

关于c# - 如何自动设置 DateCreated 和 DateUpdated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912058/

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