c# – 实体框架默认日期时间注释不迁移
我想创建一个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可能是特定于数据库的,因此最好保留在迁移中,而不是允许泄漏到模型定义中 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |