2

Linq to SQL 中是否有一个钩子可以让我在命令发送到数据库之前手动修改它?

具体来说,我试图在向WITH CHANGE_TRACKING_CONTEXT(@contextData)数据库应用插入/更新/删除时引入语法,以便能够添加针对更改跟踪的附加信息,例如发起更改的用户(这是一个 Web 应用程序使用 SQL 身份验证)。

只需在 CommandText 的开头插入此语法,同时将一个附加参数(@contextData)添加到 SqlCommand 对象,该对象将包含附加语句的数据。

提前致谢。

4

1 回答 1

1

您不需要更改任何 SQL...只需为您的 DataContext 提供现有的 SqlConnection。 http://msdn.microsoft.com/en-us/library/bb386986.aspx

在通过DataContext.SubmitChanges提交更改之前,为命令创建自己的 SqlCommand(使用与创建 DataContext 相同的 SqlConnection)WITH CHANGE_TRACKING_CONTEXT并执行它。该语句将在数据库连接期间有效。

更新: 由于这不起作用,并且如果手动进行更改跟踪不是一种选择(通过DataContext.GetChangeSet这是我在当前应用程序上所做的),我认为您将被困在做最丑陋的事情可能的事情:通过 DataContext 上的部分方法(最后一部分)为所有 INSERT/UPDATE/DELETE 指定 SQL 语句。甚至更丑的是,使用DataContext.Log记录所有生成的 SQL,在一个 Transaction 中执行 SubmitChanges,将其回滚,然后修改你从日志中取出的 SQL,并根据需要执行它。

于 2009-11-23T22:18:37.970 回答