首页 > 代码库 > Entity Framework Core的贴心:优雅处理带默认值的数据库字段
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 更多了一份魅力。
Entity Framework Core的贴心:优雅处理带默认值的数据库字段
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。