ASP.NETCoreMVCEF如何在修改记录之前获取它以进行更改跟踪?
创始人
2024-09-18 00:30:52
0

在使用Entity Framework (EF)进行更改跟踪时,有时需要在修改记录之前获取它以进行一些自定义操作。以下是一种实现方法:

首先,在模型上定义一个类似于下面的接口:

public interface IAuditableEntity
{
    DateTime CreatedDate { get; set; }
    string CreatedBy { get; set; }
    DateTime? ModifiedDate { get; set; }
    string ModifiedBy { get; set; }
}

然后,在数据库上下文类中,将实体类中的属性类型设置为这个接口:

public DbSet BlogPosts { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    foreach (var entityType in modelBuilder.Model.GetEntityTypes())
    {
        if (typeof(IAuditableEntity).IsAssignableFrom(entityType.ClrType))
        {
            modelBuilder.Entity(entityType.ClrType).Property("CreatedDate");
            modelBuilder.Entity(entityType.ClrType).Property("CreatedBy");
            modelBuilder.Entity(entityType.ClrType).Property("ModifiedDate");
            modelBuilder.Entity(entityType.ClrType).Property("ModifiedBy");
        }
    }
}

最后,在修改记录之前,通过DbContext.Entry方法获取实体的更改跟踪对象,并保存其先前值。例如,以下示例应用于修改BlogPost实体的情况:

public async Task Edit(int id, [Bind("ID,Title,Content")] BlogPost blogPost)
{
    if (id != blogPost.ID)
    {
        return NotFound();
    }

    var existingBlogPost = await _context.BlogPosts.FindAsync(id);

    if (existingBlogPost == null)
    {
        return NotFound();
    }

    // get changes
    var modifiedEntries = _context.ChangeTracker.Entries()
        .Where(x => x.Entity.CreatedDate != DateTime.MinValue
            && x.Entity.CreatedBy != null);

    // update audit fields
    foreach (var entry in modifiedEntries)
    {
        entry.Property("ModifiedDate").CurrentValue = DateTime.Now;

相关内容

热门资讯

透视玄学(wEpOke)透明挂... 透视玄学(wEpOke)透明挂辅助器(WePoKe外挂)固有真的是有挂(详细透视可靠技巧);WePo...
WePoKe外挂!德州aapo... WePoKe外挂!德州aapoker俱乐部,(aa扑克)从前真的有挂(详细辅助2025新版总结)关于...
透视真的(微扑克ai辅助工具)... 透视真的(微扑克ai辅助工具)pokerrrr2挂(详细辅助必胜教程)原生真的有挂1、不需要AI权限...
透视有挂(wEpoKe)透视辅... 透视有挂(wEpoKe)透视辅助挂(wepoke智能ai)本然是有挂(详细透视揭秘教程);原来确实真...
智星德州菠萝偷偷看牌功能!wp... 智星德州菠萝偷偷看牌功能!wpk微扑克辅助,(aapokER)总是有挂(详细辅助专业教程)1、不需要...
透视中牌率(wepokeai代... 透视中牌率(wepokeai代打的胜率)微扑克辅助测试(详细辅助黑科技教程)原本真的有挂,您好,we...
透视辅助(wePOKE)外挂透... 1、透视辅助(wePOKE)外挂透明挂辅助挂(wepoke有没有挂)原生有挂(详细透视必胜教程)2、...
德州之星外挂!约局吧是正规的吗... 德州之星外挂!约局吧是正规的吗,(德州机器人)原生是有挂(详细辅助AI教程)是一款可以让一直输的玩家...
透视最新(德州免费辅助神器ap... 1、透视最新(德州免费辅助神器app)wepokeai代打(详细辅助微扑克教程)竟然有挂;代表性(透...
透视模拟器(WepOke)外挂... 透视模拟器(WepOke)外挂透明挂辅助工具(wepok软件透明挂)都是有挂(详细透视专业教程);《...