EF框架_自动赋值创建时间、修改时间

      最近做的一个新项目,从零搭建了一个.net core网站,数据库中有两个字段,创建时间和修改时间,旧有项目是手动去更新,即每次更新到数据库前调用赋值的方法,很繁琐,所以在此进行了简化,让程序员只专注于业务逻辑,实现如下:

这个是Entity实体的基类,加入了数据ID、创建时间、修改时间,每个实体都要继承这个基类

public class EntityBase
    {
        [Column("id")]
        public Guid Id { get; set; }
        [Column("createtime")]
        public DateTime CreateTime{get; set;}
        [Column("modifiedtime")]
        public DateTime ModifiedTime{ get; set; }        
    }

这个是重写了DbContext的SaveChangesAsync()方法,在写入数据库前对新增、修改的数据进行赋值

        public override int SaveChanges()
        {
            SetSystemField();
            return base.SaveChanges();
        }
        public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            SetSystemField();
            return  base.SaveChangesAsync();
        }
        /// <summary>
        /// 系统字段赋值
        /// </summary>
        private void SetSystemField()
        {
            foreach (var item in ChangeTracker.Entries())
            {
                if (item.Entity is EntityBase)
                {
                    var entity = (EntityBase)item.Entity;
                    //添加操作
                    if (item.State == EntityState.Added)
                    {                       
                        if (entity.Id == Guid.Empty)
                        {
                            entity.Id = Guid.NewGuid();
                        }
                        entity.CreateTime = DateTime.Now;
                        entity.ModifiedTime = DateTime.Now;
                    }
                    //修改操作
                    else if (item.State == EntityState.Modified)
                    {
                        entity.ModifiedTime = DateTime.Now;
                    }
                }

            }           
        }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过EF框架创建一个表需要以下几个步骤: 1. 定义实体类:首先,你需要定义一个实体类来表示数据库中的表。实体类应该包含与表中列对应的属性。例如,如果你要创建一个名为"Product"的表,可以定义一个名为"Product"的实体类,并在该类中定义与表中列对应的属性。 ```csharp public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } ``` 2. 创建DbContext:接下来,你需要创建一个继承自DbContext的类,该类用于管理数据库上下文和表之间的映射关系。在DbContext类中,你需要使用DbSet属性来表示数据库中的表。 ```csharp public class MyDbContext : DbContext { public DbSet<Product> Products { get; set; } } ``` 3. 配置数据库连接:在DbContext类中,你需要配置数据库连接。可以在构造函数中通过调用基类的构造函数并传递连接字符串来配置数据库连接。 ```csharp public class MyDbContext : DbContext { public MyDbContext() : base("YourConnectionString") { } public DbSet<Product> Products { get; set; } } ``` 4. 迁移和应用数据库:最后,你需要使用EF的迁移工具来根据实体类定义创建表。可以使用Package Manager Console窗口执行以下命令: ``` Add-Migration InitialCreate ``` 然后执行以下命令将迁移应用到数据库中: ``` Update-Database ``` 以上步骤完成后,EF框架自动创建与实体类对应的表,并在数据库中进行映射。你可以通过DbContext来对表进行CRUD操作。 请注意,上述步骤是基于Code First方式创建表。如果你已经有现有的数据库,也可以使用Database First或Model First方式来创建表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值