对于用于保存记录添加时间的数据库日期字段,我们通常会设置一个 GETDATE() 的默认值,而不是在应用程序的代码中获取当前时间进行保存,这样可以避免由于web服务器时钟不同步引起的时间偏差。

Entity Framework Core 在设计时贴心地考虑到这个场景,提供了 .HasDefaultValueSql() 映射配置,今天在实际开发中体检了一下,的确管用。

比如下面的数据库表中 DateAdded 与 IsActive 这2个字段分别设置了默认值:

CREATE TABLE [dbo].[Log](

[Id] [int] IDENTITY(1,1) NOT NULL,

[IP] [varchar](20) NOT NULL,

[DateAdded] [datetime] NOT NULL DEFAULT (GETDATE()),

[IsActive] [bit] NOT NULL DEFAULT ((1))

)

使用 EF Core 的 HasDefaultValueSql 进行映射配置:

builder.Entity<Log>().Property(l => l.DateAdded).HasDefaultValueSql(null);
builder.Entity<Log>().Property(l => l.IsActive).HasDefaultValueSql(null);

在 EF Core 保存数据时会生成下面的SQL语句:

exec sp_executesql N'SET NOCOUNT ON;

INSERT INTO [Log] ([IP])

VALUES (@p0);

SELECT [Id], [DateAdded], [IsActive]

FROM [Log]

WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 nvarchar(20)',@p0=N'127.0.0.1'

在 INSERT 时忽略 HasDefaultValueSql 的字段,在 INSERT 后将默认值 SELECT 出来赋给实体对应的属性。

贴心的 Entity Framework Core ,让 .NET Core 更多了一份魅力。

原文地址:http://www.cnblogs.com/dudu/p/6740170.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

Entity Framework Core的贴心:优雅处理带默认值的数据库字段相关推荐

  1. Entity Framework Core 2.0 全局查询过滤器

    本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...

  2. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  3. Entity Framework Core 批处理语句

    在Entity Framework Core (EF Core)有许多新的功能,最令人期待的功能之一就是批处理语句.那么批处理语句是什么呢?批处理语句意味着它不会为每个插入/更新/删除语句发送单独的请 ...

  4. Entity Framework Core 命名约定

    注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final).正式版发布时,功能可能存在变动.Entity Framework 迁移允许从模型生成 ...

  5. Entity Framework Core 软删除与查询过滤器

    注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final).正式版发布后,功能可能存在变动. 继续探索Entity Framework Core ...

  6. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  7. “幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】

    刘德华 有一首歌叫<马桶>,其中有一句歌词是:每一个马桶都是英雄. EFCore也有一个英雄,在幕后默默地任劳任怨.它就叫 "支持字段" (Backing Fields ...

  8. 使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇

    介绍 这是"使用 ASP.NET Core ,Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用"系列文章的第二篇.以下 ...

  9. 手把手引进门之 ASP.NET Core Entity Framework Core(官方教程翻译版 版本3.2.5)

    以下是手把手引进门教程,基于 ASP.NET Core, Entity Framework Core ,ABP 框架 创建Web 应用, PS: 自带自动的测试模块哦. 样例下载 (上 github  ...

最新文章

  1. 《Cacti实战》——第1章 认识Cacti
  2. Redis命令参考简体中文版 2.4.1
  3. asp.net core轻松入门之MVC中Options读取配置文件
  4. python中的tab补全功能添加
  5. sql 逻辑运算符_SQL Like逻辑运算符介绍和概述
  6. shell脚本学习指南-学习(2)
  7. Js获取屏幕宽度、高度 移动端H5适配
  8. textbox多行文本框_文本框脚本
  9. 微积分-求导必背公式
  10. oracle insert提高速度,如何提高oracle的insert速度
  11. Forest上传下载功能使用
  12. ssh 提示Connection closed by * 的解决方案
  13. TS基础-----------get新技能
  14. 基于android的即时通讯APP 聊天APP
  15. Spark 之 logical plan
  16. ubuntu18.04或20.04 安装显卡驱动
  17. 点击率预测模型Embedding层的学习和训练
  18. c语言编程函数名:b开头
  19. [转]仿QQ弹出窗口
  20. [全网首发]一款好看的个人主页源码

热门文章

  1. 《 线性代数及其应用 (原书第4版)》——1.2 行化简与阶梯形矩阵
  2. 常用安卓开发技巧汇总
  3. 关于MySQL 查询表数据大小的总结
  4. VForum 2008系列之六:分论坛视频-虚拟世界中的应用
  5. 新功能抢先看!Windows 11 2022 版全新 ISO 镜像来了+下载
  6. .Net Crank性能测试入门
  7. ASP.Net Core Web API 如何返回 File。
  8. 试用GitHub Copilot一周后,我给你的建议是:不要使用它
  9. 实际体验SpanT 的惊人表现
  10. 基于 C# 的 ETL 大数据并行编程