.net 存储过程是使用服务器可靠设置日期时间字段的唯一方法吗';什么时候修改?

.net 存储过程是使用服务器可靠设置日期时间字段的唯一方法吗';什么时候修改?,.net,entity-framework-4,mapping,.net,Entity Framework 4,Mapping,以下是要求: 我们有一个带有lastModifiedOn列的表 我们希望该列能够真实、可靠地反映该字段在数据库中最后一次更新的(utc)时间 我们希望在使用实体框架修改表的内容时仍然如此 现在,我们使用MSL中的ModificationFunctionMapping/UpdateFunction元素和SSDL文件中定义的存储过程来实现这一点 是否有其他方法可以实现相同的效果,而不必使用存储过程 编辑: 最后,我还是不够清楚 当我说“存储过程是在SSDL文件中定义的”时,我的意思是存储过程的名

以下是要求:

  • 我们有一个带有
    lastModifiedOn
    列的表
  • 我们希望该列能够真实、可靠地反映该字段在数据库中最后一次更新的(utc)时间
  • 我们希望在使用实体框架修改表的内容时仍然如此
现在,我们使用MSL中的
ModificationFunctionMapping/UpdateFunction
元素和SSDL文件中定义的存储过程来实现这一点

是否有其他方法可以实现相同的效果,而不必使用存储过程

编辑: 最后,我还是不够清楚

当我说“存储过程是在SSDL文件中定义的”时,我的意思是存储过程的名称是在SSDL文件中定义的——但问题是我必须在数据库中部署具有这些名称的存储过程,这可能会在出现多个EF模型时产生问题。
现在我已经了解了SSDL
元素中
元素的用法,我已经能够将自定义SQL与实体框架模型的其余部分放在一起,这解决了我的问题。

您可以通过插入
当前时间戳的触发器覆盖
lastModifiedOn
列。我假设数据库服务器是Sql server。

我同意Filip的观点,在我们的应用程序中,我们还为LastModifiedOn创建了一个列,并且我们在表上创建了一个触发器,每当表中的行被更新时,该触发器就会用当前时间戳更新该列

问题是您需要在表上创建两个触发器, 1.Update Trigger:每当一行被更新时,它都会用当前时间戳更新LASTMODIFIEDDON列。
2.插入触发器:每当在表中创建一行时,就会在LastModifiedOn列中插入当前时间戳。

虽然我喜欢这种解决方案,特别是因为它将该问题的负担放在了它所属的位置,但遗憾的是,这不是我们的选择(事实上,部分问题在于系统已经变得足够复杂,以至于这些触发器的实现不一致,无法依赖。)请参阅对Filip答案的评论。您能再解释一下为什么这些触发器的实现会不一致吗?因为一开始表上没有触发器;现在世界上至少有几十台服务器上有数百个数据库,有上千个表,链接在一个相当复杂的复制系统中(最简单的复制模式中需要7个数据库).最后,在一些表上,我们有触发器,而在其他表上我们没有;我们无法事先知道这一点,因为这取决于您正在处理的数百个数据库中的哪一个。嗯……这是同类数据库中的一个。看,我仍然会选择触发器,最初这会很痛苦,但一旦创建了触发器,它就会以更一致的方式输入lastmodifiedtime。要实现自动化,您可以创建一个脚本,该脚本将在表上创建触发器,如果触发器存在,则删除该触发器,然后再次创建该触发器。否则,您当前的方法很好。@Sumit:别担心-我的问题是必须将存储过程部署到数据库服务器。现在,我将自定义SQL限制在SSDL文件中,我想解决的问题就解决了。(我完全同意,如果触发器可靠地就位,SQL甚至就不需要了。)