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

对于用于保存记录添加时间的数据库日期字段,我们通常会设置一个 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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap组件

一、Bootstrap常用的组件&#xff1a; icon图标&#xff0c;下拉菜单&#xff0c;导航&#xff0c;导航条&#xff0c;输入框&#xff0c;缩略图&#xff0c;媒体对象&#xff0c;列表组&#xff0c;分页导航。 二、小图标&#xff1a; 1.bootstrap中内置提供了250多种小图标。…

JS中使用工厂模式创建对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>function createPerson(name , age ,gender){//创建一个新的对象var obj new Object…

深度历险:Redis 内存模型详解

转载自 深度历险&#xff1a;Redis 内存模型详解 Redis 是目前最火爆的内存数据库之一&#xff0c;通过在内存中读写数据&#xff0c;大大提高了读写速度&#xff0c;可以说 Redis 是实现网站高并发不可或缺的一部分。 我们使用 Redis 时&#xff0c;会接触 Redis 的 5 种对…

count does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manu

mybatis 查询用户总个数时 报错 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION eesy_mybatis.count does not exist. Check the Function Name Parsing a…

.NET的一点历史故事:误入歧途,越陷越深

移动计算的时代其实早已有了苗头&#xff0c;起码微软的 Windows CE、诺基亚的 Symbian 都曾经给手机用户多少带来了一些便利&#xff0c;黑莓则由于接入了企业邮件等商业应用而日进斗金&#xff0c;甚至 Sun 也给自己的 Java 平台做了一个 J2ME 标准&#xff0c;试图用 J2EE 那…

bootstrap样式代码案例

运行结果如下所示&#xff1a; 代码如下所示&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,user-scalableno,initial-scale1.0,maximum-scale1.0,mi…

JS中用构造函数创建对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>/* 构造函数的执行流程&#xff1a;* 1.立刻创建一个新的对象* 2.将新建的对象设置…

史上最全阿里 Java 面试题总结

转载自 史上最全阿里 Java 面试题总结 以下为大家整理了阿里巴巴史上最全的 Java 面试题&#xff0c;涉及大量 Java 面试知识点和相关试题。 JAVA基础 JAVA中的几种基本数据类型是什么&#xff0c;各自占用多少字节。 String类能被继承吗&#xff0c;为什么。 String&#…

SELECT * FROM user WHERE username LIKE #{aaa}与SELECT * FROM user WHERE username LIKE '%${value}%'

在Mybatis中模糊查询like有两种写法&#xff1a; 第一种为SELECT * FROM user WHERE username LIKE #{aaa} 另一种SELECT * FROM user WHERE username LIKE ‘%${value}%’ LIKE #{aaa}执行的SQL为&#xff1a; 使用的是&#xff1f;占位符&#xff1a;对用的是preparedStatem…

bootstrap组件的案例代码

运行结果如图所示&#xff1a; 代码如下所示&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,user-scalableno,initial-scale1.0,maximum-scale1.0,mi…

了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器

在本期专栏中&#xff0c;我将介绍我们在编程时经常用到的 C# 核心构造&#xff08;即 foreach 语句&#xff09;的内部工作原理。了解 foreach 内部行为后&#xff0c;便可以探索如何使用 yield 语句实现 foreach 集合接口&#xff0c;我将对此进行介绍。 虽然 foreach 语句编…

JS中的原型

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">/** 原型 prototype* * 我们所创建的每一个函数&#xff0c;解析器都会向函数中添加一个属性prototype* …

扫盲,为什么分布式一定要有Redis?

转载自 扫盲&#xff0c;为什么分布式一定要有Redis? 考虑到绝大部分写业务的程序员&#xff0c;在实际开发中使用 Redis 的时候&#xff0c;只会 Set Value 和 Get Value 两个操作&#xff0c;对 Redis 整体缺乏一个认知。所以我斗胆以 Redis 为题材&#xff0c;对 Redis …

Mybatis insert操作细节【ID】

默认情况下映射文件中插入数据&#xff1a; <insert id"saveUser" parameterType"com.itheima.domain.User">INSERT INTO user (username,address,sex,birthday) VALUES (#{username},#{address},#{sex},#{birthday})</insert>单元测试 Testp…

关于人脸识别最近浏览器打不开摄像头的解决方案

好久没有发公众号啦&#xff0c;因为最近没有在技术方面有更高的提升&#xff0c;关于人脸识别浏览器兼容问题一直很头疼&#xff0c;时至今日&#xff0c;随着浏览器的更新&#xff0c;代码也不得不更新一下了&#xff0c;今天主要是给大家解决一个谷歌浏览器里面的错&#xf…

C# 7 中的模范和实践

原文地址:https://www.infoq.com/articles/Patterns-Practices-CSharp-7 关键点 遵循 .NET Framework 设计指南&#xff0c;时至今日&#xff0c;仍像十年前首次出版一样适用。API 设计至关重要&#xff0c;设计不当的API大大增加错误&#xff0c;同时降低可重用性。始终保持&q…

JS重写toString(),打印想要的值

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><title></title><script type"text/javascript">function Person(name , age , gender){this.name name;this.age age;this.gender gender;}//修改Perso…

Mybatis实体类属性名与数据库类名不对应的两种解决方法

在Mybatis开发时&#xff0c;如果 Bean的属性名与数据库的类名不一致时&#xff0c;CRUD将出现问题。 数据库类名 Bean的属性名&#xff1a;&#xff08;默认&#xff09; 调整Bean中的属性名&#xff1a;&#xff08;测试不一致&#xff09; 此时原有代码将会报错&#xff…

苹果CMS的V10版本后台登录一直提示验证码错误的解决方案

今天&#xff0c;好奇的我准备 搭建一个电影网站&#xff0c;一切准备就绪&#xff0c;刚开始出现的问题是&#xff0c;不支持fileinfo&#xff0c;然后不能继续安装&#xff0c;这个的解决方案是&#xff1a; 直接在服务器里面查找文件&#xff1a;phop.ini文件&#xff0c;查…

揭开Java 泛型类型擦除神秘面纱

转载自 揭开Java 泛型类型擦除神秘面纱 泛型&#xff0c;一个孤独的守门者。 大家可能会有疑问&#xff0c;我为什么叫做泛型是一个守门者。这其实是我个人的看法而已&#xff0c;我的意思是说泛型没有其看起来那么深不可测&#xff0c;它并不神秘与神奇。泛型是 Java 中一…