zoukankan      html  css  js  c++  java
  • EF记录统一添加创建,修改时间

    public class BaseEntity
    {
        public DateTime? DateCreated { get; set; }
        public string UserCreated { get; set; }
        public DateTime? DateModified { get; set; }
        public string UserModified { get; set; }
    }

    We’ll add the DateCreatedUserCreatedDateModified and UserModified fields to each entity by creating a BaseEntity.cs class. Each entity that you want to contain these fields should inherit this class.

    For example, my Student.cs entity will looks like this:

    public class Student : BaseEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    In this step we’ll intercept entites as they are saved and update their created and modified fields automtically. Take a look at my DbContext below:

    public class SchoolContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
    
        public override int SaveChanges()
        {
            AddTimestamps();
            return base.SaveChanges();
        }
     
        public override async Task<int> SaveChangesAsync()
        {
            AddTimestamps();
            return await base.SaveChangesAsync();
        }
    
        private void AddTimestamps()
        {
            var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));
    
            var currentUsername = !string.IsNullOrEmpty(System.Web.HttpContext.Current?.User?.Identity?.Name)
                ? HttpContext.Current.User.Identity.Name
                : "Anonymous";
    
            foreach (var entity in entities)
            {
                if (entity.State == EntityState.Added)
                {
                    ((BaseEntity)entity.Entity).DateCreated = DateTime.UtcNow;
                    ((BaseEntity)entity.Entity).UserCreated = currentUsername;
                }
    
                ((BaseEntity)entity.Entity).DateModified = DateTime.UtcNow;
                ((BaseEntity)entity.Entity).UserModified = currentUsername;
            }
        }
    }
  • 相关阅读:
    用C#开发.NET CF 蓝牙通信模块
    记录台湾民众生活:一起来看看台湾的物价
    .NET Socket开发之同步Socket实现两例
    SOA和BPM结合的三种方法
    Why we chose ASP.NET to run our startup
    用JScript.net写.net应用程序
    Linux至少有五大点比Vista更好
    Windows 窗体的.Net 框架绘图技术
    优化增强您的Visual C++应用程序
    VS 2008和.NET 3.5 Beta2新特性介绍
  • 原文地址:https://www.cnblogs.com/luhe/p/9259792.html
Copyright © 2011-2022 走看看