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
字段的值,请问如何解决?
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 中处理一下吧(猜测,待确定)
刚刚已经确认 HasDefaultValueSql
只是用于生成数据库的时候
@dudu:
嗯,也看到这句了,期待后续会增加插入时处理这个特性
在core 3.1里面使用 ef core,遇到某个字段 int 类型 默认值 是2,而在代码中显式更改 该字段的值 为 1的时候,无法生效的问题,请问这两个问题之间有关联么?