我正在尝试向模型中的实体添加CreatedDate属性,并且正在使用EF5 Code First。我希望此日期一经设置就不会更改,我希望它是UTC日期。我不想使用构造函数,因为我的模型中有许多实体要从包含CreatedDate属性的抽象类继承,因此我不能使用接口(interface)强制构造函数。

我尝试了不同的数据批注,并且尝试编写一个数据库初始化程序,该数据库初始化程序将选择特定的实体类型,并使用getdate()默认值为正确的table_namecolumn_name编写一个alter约束,但是我无法编写该代码正确地。

请不要让我使用AuditDbContext - Entity Framework Auditing ContextEntityFramework.Extended工具,因为它们无法满足我的需要。

更新

我的CreatedDateSaveChanges()上为空,因为我正在将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/

10-09 01:09