2011-03-23 22 views
0

这里是要求:存储过程是使用服务器的修改时间可靠地设置日期时间字段的唯一方法吗?

  • 我们有一个lastModifiedOn列的表。
  • 我们希望该列真正可靠地反映数据库中上次更新字段的时间(utc)。
  • 我们希望在用Entity Framework修改表格的内容时仍然如此。

现在,我们正在用MSL中的ModificationFunctionMapping/UpdateFunction元素和SSDL文件中定义的存储过程来做到这一点。

有没有达到同样的效果,而无需使用存储过程的另一种方式?

编辑: 最后,我不太清楚。

当我说“在SSDL文件中定义了存储过程”时,我的意思是说存储过程的名称是在SSDL文件中定义的 - 但问题是我必须部署存储过程这些名字在数据库中,这可能会在多个EF模型中产生问题。 现在我已经明白在SSDL <Function>元素使用<CommandText>元素,我已经能够把自定义的SQL实体框架模型的其余一起 - 这解决了我的问题。

回答

0

您可以覆盖lastModifiedOn柱,以触发插入current_timestamp。我假定数据库服务器是一个Sql Server。

+0

虽然我喜欢这样的解决方案 - 特别是因为它把所关注的负担,它属于 - 这是可悲的不是我们的选择(其实,这个问题的一部分,该系统已经成长足够复杂的实施这些触发器是不一致的,不能被依赖。) – 2011-03-23 10:28:20

0

我与菲利普同意,在我们的应用中也有LastModifiedOn一列中,我们已经创建了与当前的时间戳每当行的表更新更新此列的表的触发器。

事情是你需要在表上创建两个触发器, 1.更新触发器:更新LastModifiedOn列时使用当前时间戳更新行。 2.插入触发器:只要在表中创建一行,就会在LastModifiedOn列中插入当前时间戳。

+0

参考对菲利普答案的评论。 – 2011-03-23 10:31:30

+0

你能否解释一下为什么这些触发器的实现会不一致? – Sumit 2011-03-24 04:50:52

+0

因为开始时表格上没有触发器;现在全世界至少有数十台服务器上有数百个数据库,并且有数千个表以相当复杂的复制系统链接(7个数据库在最简单的复制模式中是必需的)。最后,在一些表格中,我们有触发器,而在其他表格上我们没有;无法事先知道,因为它可能取决于您正在处理的数百个数据库中的哪一个。 – 2011-03-24 05:45:50

相关问题