默认值

默认值

在关系数据库中,可以使用默认值来配置列;如果插入的行没有该列的值,将使用默认值。

可以在属性上配置默认值:

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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注