加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 实体框架默认日期时间注释不迁移

发布时间:2020-12-15 04:20:13 所属栏目:百科 来源:网络整理
导读:我想创建一个DateTime字段,以便它一旦到达数据库就会有一个默认的GETDATE().所以我这样做了: public class Specialty { [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime? CreatedDate { get; set; } // other properties not shown
我想创建一个DateTime字段,以便它一旦到达数据库就会有一个默认的GETDATE().所以我这样做了:
public class Specialty
 {
     [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
     public DateTime? CreatedDate { get; set; }

     // other properties not shown for brevity.
 }

所以我在PM>中运行了Add-Migration.安慰.在Up函数中导致了这一点(并未显示所有行):

AddColumn("dbo.Specialty","CreatedDate",c => c.DateTime());

我明白c.DateTime(…)的可空是默认为真,所以我明白为什么没有指定.但是defaultValueSql在哪里:“GETDATE()”?

我知道我可以手动把它,但这似乎打败了Add-Migration的目的,并使[DatabaseGenerated(DatabaseGeneratedOption.Computed)]无用.我知道defaultValueSql的默认值不是“GETDATE()”,因为当我查看SQL Management Studio中的列属性时它不会显示.

少了什么东西?名称“CreatedDate”是否违反了EF惯例?除了System.ComponentModel.DataAnnotations.Schema之外,我还应该引用另一个库吗?

解决方法

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]并非无用,它告诉实体框架该列在数据库中是必需的,但是由数据库计算.所以它知道它应该在迁移中创建列,它知道它不应该尝试更新其值,也不应该插入值.

缺少的是您必须将计算添加到数据库列.你通过修改迁移来做到这一点:

AddColumn("dbo.Specialty",c => c.DateTime(defaultValueSql: "GETDATE()"));

目前没有办法在数据注释中指定sql,我怀疑永远不会有,因为sql可能是特定于数据库的,因此最好保留在迁移中,而不是允许泄漏到模型定义中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读