首页 新闻 会员 周边

EF Core 3.0 的 HasDefaultValueSql 问题

0
悬赏园豆:50 [已解决问题] 解决于 2019-10-16 17:43

EF Core 的实体配置代码如下

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .Property(b => b.Created)                
        .HasDefaultValueSql("getdate()");
}

运行时生成的 SQL 语句如下

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Blogs] ([Flag], [Url])
VALUES (@p0, @p1);
SELECT [BlogId], [Created]
FROM [Blogs]
WHERE @@ROWCOUNT = 1 AND [BlogId] = scope_identity();

',N'@p0 int,@p1 nvarchar(4000)',@p0=3,@p1=NULL

EF Core 没有使用 getdate() 生成 Created 字段的值,请问如何解决?

dudu的主页 dudu | 高人七级 | 园豆:30979
提问于:2019-10-16 16:52
< >
分享
最佳答案
0

https://github.com/aspnet/EntityFrameworkCore/issues/15070

If the property value is the CLR default, then don't include the value in the insert, and instead propagate back the store-generated value.
If the property value is anything else, then include it in the insert.

应该是 DateTime Created 在对象初始化时候已经有默认值了导致 HasDefaultValueSql 不起作用,可能需要在 Created get set 中处理一下吧(猜测,待确定)

收获园豆:50
孤月星霜 | 菜鸟二级 |园豆:256 | 2019-10-16 17:23

刚刚已经确认 HasDefaultValueSql 只是用于生成数据库的时候

dudu | 园豆:30979 (高人七级) | 2019-10-16 17:27

@dudu:
嗯,也看到这句了,期待后续会增加插入时处理这个特性

孤月星霜 | 园豆:256 (菜鸟二级) | 2019-10-16 17:30
其他回答(1)
0

在core 3.1里面使用 ef core,遇到某个字段 int 类型 默认值 是2,而在代码中显式更改 该字段的值 为 1的时候,无法生效的问题,请问这两个问题之间有关联么?

林石 | 园豆:202 (菜鸟二级) | 2021-12-06 20:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册