默认值
在关系数据库中,可以使用默认值来配置列;如果插入的行没有该列的值,将使用默认值。
可以在属性上配置默认值:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Rating)
.HasDefaultValue(3);
}Code language: JavaScript (javascript)
还可以指定用于计算默认值的 SQL 片段:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Created)
.HasDefaultValueSql("getdate()");
}Code language: JavaScript (javascript)
指定默认值会隐式将属性配置为在添加时生成的值。
在添加或更新时生成值
None表示不处理
Identity表示自增长
Computed表示计算所得。
None表示数据库直接存储读入的值,不做额外处理。
在Entity Framework中,如果主键是int类型,生成数据库的时候会自动设置该列为自增长。如果主键是Guid类型,我们就要手动设置列的属性为自增长。
如果对属性标识为Computed,Entity Framework会认为该列是通过其它列计算得出的,不会将其持久化到数据库中
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime LastUpdated { get; set; }
}Code language: JavaScript (javascript)
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.LastUpdated)
.ValueGeneratedOnAddOrUpdate();
}Code language: JavaScript (javascript)
计算列
在某些关系数据库上,列可以配置为在数据库中计算其值,通常具有引用其他列的表达式:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(p => p.DisplayName)
.HasComputedColumnSql("[LastName] + ', ' + [FirstName]");
}Code language: JavaScript (javascript)