Entity Framework Core的贴心:优雅处理带默认值的数据库字段
對(duì)于用于保存記錄添加時(shí)間的數(shù)據(jù)庫日期字段,我們通常會(huì)設(shè)置一個(gè)?GETDATE()?的默認(rèn)值,而不是在應(yīng)用程序的代碼中獲取當(dāng)前時(shí)間進(jìn)行保存,這樣可以避免由于web服務(wù)器時(shí)鐘不同步引起的時(shí)間偏差。
Entity Framework Core 在設(shè)計(jì)時(shí)貼心地考慮到這個(gè)場景,提供了?.HasDefaultValueSql()?映射配置,今天在實(shí)際開發(fā)中體檢了一下,的確管用。
比如下面的數(shù)據(jù)庫表中 DateAdded 與 IsActive 這2個(gè)字段分別設(shè)置了默認(rèn)值:
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 進(jìn)行映射配置:
builder.Entity<Log>().Property(l => l.DateAdded).HasDefaultValueSql(null); builder.Entity<Log>().Property(l => l.IsActive).HasDefaultValueSql(null);在 EF Core 保存數(shù)據(jù)時(shí)會(huì)生成下面的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 時(shí)忽略?HasDefaultValueSql 的字段,在 INSERT 后將默認(rèn)值 SELECT 出來賦給實(shí)體對(duì)應(yīng)的屬性。?
貼心的 Entity Framework Core ,讓 .NET Core 更多了一份魅力。?
原文地址:http://www.cnblogs.com/dudu/p/6740170.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的Entity Framework Core的贴心:优雅处理带默认值的数据库字段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅析如何在Nancy中生成API文档
- 下一篇: MSSQL-Scripter,一个新的生