700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Entity Framework Core的贴心:优雅处理带默认值的数据库字段

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

时间:2022-03-22 09:29:27

相关推荐

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 更多了一份魅力。

原文地址:/dudu/p/6740170.html

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。