Entity Framework 6 实体某些字段根据模型状态进行自动更新内容
1.定义基础实体对象
public class BaseEntity
{
public int Id { get; set; }
public DateTime? CreateTime { get; set; }
public DateTime? UpdateTime { get; set; }
public BaseEntity()
{
CreateTime = DateTime.Now;
}
}
2.定义业务实体对象
public class DictEntity:BaseEntity
{
/// <summary>
/// 分组名称
/// </summary>
[StringLength()]
public string GroupName { get; set; }
}
3.在DbContext类里重写SaveChanges()方法
public class DBContext : DbContext
{
public DBContext() : base("Name=ElectronicPrescriptionDB")
{
Database.SetInitializer(new DBInitializer());
}
public DbSet<DictEntity> Dicts { get; set; }
public override int SaveChanges()
{
var selectedEntityList = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && x.State == EntityState.Modified);
//可以加入cookie里面的username,比如:操作人,需扩展DateTimeEntity的属性。
//var userName = "MUKESH";
foreach (var entity in selectedEntityList)
{
((BaseEntity)entity.Entity).UpdateTime = DateTime.Now;
}
return base.SaveChanges();
}
}
之所以选择此方法,经过测试后最简便方法。其他还有:
public RepositoryContext() : base("ApiConn")
{
((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.ObjectStateManagerChanged += this.OnSaveChanges;
}
在OnSaveChanges(object obj, CollectionChangeEventArgs args)里面去获取实体状态,根据实体状态进行更新对应数据。但是,每次触发实体都会触发该扩展方法。所以没选择。
Entity Framework 6 实体某些字段根据模型状态进行自动更新内容的更多相关文章
- [转]Entity Framework 的实体关系
通过 Entiy Framework实践系列 文章,理了理 Entity Framework 的实体关系. 为什么要写文章来理清这些关系?“血”的教训啊,刚开始使用 Entity Framework ...
- Entity Framework使用EntityState和Attach来保存数据变化以及更新实体的个别字段
在使用Entity Framework作为ORM来存取数据的过程中,最常规的操作就是对数据对象的更新.本文将会包含如何Attach Entity到一个数据Context中,以及如何使用EntitySt ...
- Entity Framework(实体框架 EF)
什么是Entity Framework呢(下面简称EF)? EF(实体框架)是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架.ORM(对象关系映射框架):指的是面向 ...
- Entity Framework关联实体的三种加载方法
推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...
- 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- Entity Framework 6 Recipes 2nd Edition(12-5)译 -> 自动删除相关联实体
12-5. 自动删除相关联实体 问题 当一个实体被删除时,你想自动删除它相关联的实体 解决方案 假设你有一个表结构由一个course (科目), course 的classes (课程),以及enro ...
- Entity Framework管理实体关系(二):管理一对二关系
在上一篇文章中,简单的介绍了使用Fluent API如何管理一对一的实体关系,在这篇文章中,接着介绍Fluent API如何管理一对多的实体关系. 要在数据库中配置一对多关系,我们可以依赖EF约定,还 ...
- Entity Framework管理实体关系(一):管理一对一关系
我们现在已经知道如何使用Code First来定义简单的领域类,并且如何使用DbContext类来执行数据库操作.现在我们来看下数据库理论中的多样性关系,我们会使用Code First来实现下面的几种 ...
- 解决Entity Framework中DateTime类型字段异常
从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值 具体的错误原因是:C#中的DateTime类型比SqlServer中的datetime范围大.SqlServe ...
随机推荐
- 线程_multiprocessing异步
from multiprocessing import Pool import time import os def test(): print("---进程池中的进程---pid=%d,p ...
- PHP xml_get_current_line_number() 函数
定义和用法 xml_get_current_line_number() 函数获取 XML 解析器的当前行号.高佣联盟 www.cgewang.com 如果成功,该函数则返回当前行号.如果失败,则返回 ...
- MOS 预夹断到底是什么
https://www.cnblogs.com/yeungchie/ MOS管就像一个开关,栅极(Gate)决定源极(Souce)到漏极(Drain)的沟道(Channel)是开还是关.以NMOS为例 ...
- luogu P3264 [JLOI2015]管道连接
LINK:管道连接 一张无向图 有P个关键点 其中有K个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...
- lamp分离部署
目录 lamp分离部署 1. 安装httpd 2. 安装mysql 3. 安装php 4. 配置apache并部署项目 4.1 启用代理模块 4.2 配置虚拟主机 4.3 部署PbootCMSPHP企 ...
- Ubuntu安装海思SDK(转)
问题 海思SDK安装时,无法运行sdk.unpack 原因 BASH 和 DASH 的问题. Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主 ...
- 迭代列表不要For循环,这是Python列表推导式最基本的概念
如果你还在使用 For 循环迭代列表,那么你需要了解了解列表推导式,看看它的基本概念都是什么. 列表解析式(List comprehension)或者称为列表推导式,是 Python 中非常强大和优雅 ...
- 注重代码习惯,Python零基础从这本书籍开始!
笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...
- 卷积神经网络 part2
[任务一]代码练习 在谷歌 Colab 上完成代码练习,关键步骤截图,并附一些自己的想法和解读. ● MobileNetV1 网络:简要阅读谷歌2017年的论文<MobileNets: Eff ...
- C#LeetCode刷题-几何
几何篇 # 题名 刷题 通过率 难度 587 安装栅栏 21.5% 困难 892 三维形体的表面积 C#LeetCode刷题之#892-三维形体的表面积(Surface Area of 3D Sh ...