我正在尝试向模型中的实体添加CreatedDate
属性,并且正在使用EF5 Code First。我希望此日期一经设置就不会更改,我希望它是UTC日期。我不想使用构造函数,因为我的模型中有许多实体要从包含CreatedDate
属性的抽象类继承,因此我不能使用接口(interface)强制构造函数。
我尝试了不同的数据批注,并且尝试编写一个数据库初始化程序,该数据库初始化程序将选择特定的实体类型,并使用getdate()
默认值为正确的table_name
和column_name
编写一个alter约束,但是我无法编写该代码正确地。
请不要让我使用AuditDbContext - Entity Framework Auditing Context或EntityFramework.Extended工具,因为它们无法满足我的需要。
更新
我的CreatedDate
在SaveChanges()
上为空,因为我正在将ViewModel传递给我的 View ,该 View 中正确没有名为CreatedDate
的审核属性。即使将模型传递给 View ,也不会在 View 中编辑或存储CreatedDate
。
我读了here,我可以添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
,这将告诉EF在插入和更新之后正确存储CreatedDate
,但不允许我的应用程序对其进行更改:但是我只是通过添加此属性而收到Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF
错误。
我将切换到EF Model First,因为此简单的数据库要求在Code First中实现很可笑。
最佳答案
这是我的做法:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreatedDate{ get; set; }
在我的迁移的Up()方法中:
AddColumn("Agents", "CreatedDate", n => n.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"));
关于entity-framework - 首先使用Entity Framework 5代码将CreatedDate添加到实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14385477/