美文网首页
2020-03-30 16:26 数据库为表字段自动生成的值

2020-03-30 16:26 数据库为表字段自动生成的值

作者: daiwei_9b9c | 来源:发表于2020-05-16 17:13 被阅读0次

    提纲:

    1. [DatabaseGenerated(DatabaseGeneratedOption.None)]
    2. [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    3. [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    4. 为字段指定默认值
    5. 为字段指定计算值

    对于某些字段,服务器端可能会自动生成新值.

    • 添加时产生新值

    如果由数据库生成值,则当你将实体添加到上下文时,EF 可能会赋予一个临时值。 在 SaveChanges()期间,此临时值将替换为数据库生成的值。
    如果将一个实体添加到已经为属性赋予值的上下文,则 EF 会尝试插入该值而不是生成新值。 如果某个属性未分配 CLR 默认值(null 用于 string,0 用于 int,Guid.Empty Guid等),则该属性被视为已分配值。

    上面这句话指, 如果客户端指定了非 CLR 的默认值, 则 EF将尝试插入客户端指定的值

    • 在添加或更新时生成值

    在添加或更新时生成值,意味着在每次保存该记录(插入或更新)时生成新值。
    与新增时一样,如果为新添加的实体实例的属性指定值,则将插入该值,而不是要生成的值。
    还可以在更新时设置显式值。

    设置默认值 ( 添加新记录时 )

    指定数据库内新记录产生的默认值为 3
    modelBuilder.Entity<Blog>().Property(b => b.Rating).HasDefaultValue(3);
    指定数据库内新记录产生的默认值为 getdate
    modelBuilder.Entity<Blog>().Property(b => b.Rating).HasDefaultValueSql("getdate()");

    指定字段由服务器更新值

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    modelBuilder.Entity<Blog>().Property(b => b.LastUpdated).ValueGeneratedOnAddOrUpdate();

    计算列

    某些关系数据库上,列可以配置为在数据库中计算其值,通常具有引用其他列的表达式
    modelBuilder.Entity<Person>().Property(p => p.DisplayName).HasComputedColumnSql("[LastName] + ', ' + [FirstName]");

    以上由服务器产生的字段内容,在保存后,都将会将服务器产生的字段内容填充会 EF的实体中;

    指定主键有客户端指定而不是由服务器端产生

    '[DatabaseGenerated(DatabaseGeneratedOption.None)]'
    'modelBuilder.Entity<Blog>().Property(b => b.BlogId).ValueGeneratedNever();`

    相关文章

      网友评论

          本文标题:2020-03-30 16:26 数据库为表字段自动生成的值

          本文链接:https://www.haomeiwen.com/subject/flvvuhtx.html