我有一个包含[CreatedAtIsoUtc]列的表,用于设置Sql Server的默认值
migrationBuilder.CreateTable(
name: "CurrentAccountLedger",
columns: table => new
{
Id = table.Column<Guid>(nullable: false, defaultValueSql: "newsequentialid()"),
CreatedAtIsoUtc = table.Column<DateTime>(nullable: false, defaultValueSql: "GETUTCDATE()"),
}
});
在原始sql server查询中,我可以插入一条记录并覆盖[CreatedAtIsoUtc]默认值。
在实体框架中,我似乎无法在执行Add()操作时覆盖此值。
关于如何让这个工作的任何想法?
答案 0 :(得分:3)
实际上在EF Core v1.1.0中,你可以通过将属性设置为不同的任何值来实现,而不是类型的默认值(即数字为0
,false
适用于bool
,null
适用于string
和可空类型,default(DateTime)
适用于您的情况)。唯一的当前限制是您无法使用0
,false
,null
等覆盖sql默认值。
例如
db.CurrentAccountLedger.Add(new CurrentAccountLedger { });
会插入CreatedAtIsoUtc
等于默认GETUTCDATE()
的记录,而
db.CurrentAccountLedger.Add(new CurrentAccountLedger { CreatedAtIsoUtc = new DateTime(2017, 1, 1) });
将插入具有指定值的记录。
答案 1 :(得分:2)
您可以使用OnModelCreating()
在上下文的HasDefaultValueSql()
中为您的实体设置原始SQL默认值:
class YourContext : DbContext
{
public DbSet<CurrentAccountLedger> CurrentAccountLedgers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CurrentAccountLedger>()
.Property(x => x.CreatedAtIsoUtc)
.HasDefaultValueSql("GETUTCDATE()");
}
}