我想提一下,我正在尝试让Entity Framework/SQL Server做一些类似Rails的事情。我只是想知道在数据库中插入/更新记录时自动创建created_at和updated_at列值的“最佳”方法。
目前,我已经钩入了ObjectContext.SavingChanges事件,并且工作得很好。然而,在编写和测试代码后,我意识到可能有更好或更快的方法来实现这一点。
我想提一下,我正在尝试让Entity Framework/SQL Server做一些类似Rails的事情。我只是想知道在数据库中插入/更新记录时自动创建created_at和updated_at列值的“最佳”方法。
目前,我已经钩入了ObjectContext.SavingChanges事件,并且工作得很好。然而,在编写和测试代码后,我意识到可能有更好或更快的方法来实现这一点。
一种方法是使用插入/更新触发器将created_at和updated_at列设置为当前时间。
插入触发器应该长这样:
CREATE TRIGGER [dbo].[inserted_myTable] ON [dbo].[myTable] AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[myTable] Set AdmitDateTime = GetDate() where pkid in (SELECT pkid FROM Inserted)
END
更新触发器 会像这样:
CREATE TRIGGER [dbo].[updated_myTable] ON [dbo].[myTable] AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[myTable] Set AdmitDateTime = GetDate() where pkid in (SELECT pkid FROM Inserted)
END
触发器的优点之一是时间/日期始终处于相同的时区。另一个优点是,如果有人在应用程序之外修改了数据库记录,则字段仍会被更新。
触发器的优点是时间/日期始终处于相同的时区,而且如果有人在应用程序之外修改了数据库记录,字段仍然会被更新。