【问题标题】:Linq to SQL: Ammend command before submission to databaseLinq to SQL:在提交到数据库之前修改命令
【发布时间】:2010-12-19 16:08:00
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 仅供参考 - 我用一些替代方法更新了下面的答案。

标签: linq-to-sql .net-3.5 ado.net change-tracking sqlclient


【解决方案1】:

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

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

更新: 由于这不起作用,并且如果手动进行更改跟踪不是一种选择(通过DataContext.GetChangeSet,这是我在当前应用程序上所做的),我认为您将被困在做最丑陋的事情可能:specify the SQL statements for all of your INSERT/UPDATE/DELETE through partial methods on your DataContext(最后一节)。或者更丑的是,使用DataContext.Log记录所有生成的SQL,在一个Transaction中执行SubmitChanges,回滚,然后修改你从日志中取出的SQL,按照需要执行。

【讨论】:

  • 我喜欢这个主意。我将不得不看看是否可以通过继承将其注入 SubmitChanges 链。会让你知道我是怎么过的。谢谢。
  • 不幸的是,单独发出语句,而不使用后续更新命令,例如,会导致错误。我将不得不找到一种将其插入实际更新命令的方法。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多