前言
在做数据库设计时,为了方便进行数据追踪,通常会有几个字段是每个表都有的,比如创建时间、创建人、更新时间、更新人、备注等,在存储这些时间时,要么存储 WEB 服务器的时间,要么存储数据库服务器的时间,有时候,WEB 服务器的时间和数据库服务器的时间可能会不一致,所以为了精准,通常还是倾向于存储数据库服务器的时间,如果是 ASP.NET,使用原始 SQL 进行操作,我们可以在数据库中把这些时间字段设置为时间默认值如 getdate(),存储数据操作时,忽略这些时间字段,数据库就会自动把这些字段填充为数据库服务器的当前时间,但是由于 EF 是操作整个数据表对象,所以无法沿用以前的作法,需要另找其它方法。
本文分享 EF DB First 和 Code First 两种模式下 DateTime 字段各自如何存储数据库服务器当前时间的方法。
Database First 配置步骤
- 打开 edmx 文件
- 右键表 DataTime 字段,选择 属性,打开字段属性窗口
- 在 常规-StoreGeneratedPattern 下拉框选择 Computed
- 保存
- 这样存储数据时就能取数据库的时间默认值了,如果用的是 SQLServer,取的就是 getdate()
- 反映在 edmx xml 中,如:
<Property Name="CreationTime" Type="datetime" Nullable="false" StoreGeneratedPattern="Computed" /> <Property Name="CreationTime" Type="DateTime" Nullable="false" Precision="3" annotation:StoreGeneratedPattern="Computed" />
- 注:从数据库更新模型不会影响此配置
Code First
在数据表实体的时间字段添加这个特性即可 [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
,如:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime CreationTime { get; set; }
总结
希望本文分享的方法对您有所启发,如何您有更好的方法,欢迎留言讨论!
往期精彩
我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊程序人生,共同学习,共同进步