在 submitchanges() 方法触发之前是否可以拦截 linq 生成的 TSQL?我需要修改 sql 插入查询。
问问题
239 次
2 回答
2
您不能这样修改 SQL,但可以拦截插入过程。您生成的数据上下文应该具有方法的部分实现Insert
。例如,如果您的实体被命名,则MyDbEntity
:
partial void InsertMyDbEntity(MyDbEntity instance);
由于这是局部的,因此您可以在围绕生成的数据上下文创建的局部类中对其进行修改。然后,您可以使用此钩子从整块布料中生成 INSERT 语句,或者只调用您编写的自定义存储过程来处理您试图实现的任何细微差别。
这是您能做的最好的事情——您不能在此过程中检测现有的 INSERT SQL。
于 2012-06-08T14:02:04.607 回答
0
是的,可以拦截SubmitChanges()
调用,但不能拦截 SQL 本身。
在我的应用程序中,我的 .dbml 文件名为“ GlobalPricing.dbml
”,并且我创建了一个名为 .dbml 的类GlobalPricingDataContext.cs
。
public partial class GlobalPricingDataContext: System.Data.Linq.DataContext
{
public override void SubmitChanges(ConflictMode failureMode)
{
int inserts = base.GetChangeSet().Inserts.Count;
int updates = base.GetChangeSet().Updates.Count;
int deletes = base.GetChangeSet().Deletes.Count;
Trace.WriteLine(string.Format("{0} There are {1} inserts, {2} updates and {3} deletes.", DateTime.Now.ToLongTimeString(), inserts, updates, deletes));
base.SubmitChanges(failureMode);
}
}
同样,此代码不会让您修改正在运行的 SQL,但它至少会让您知道每个SubmitChanges()
调用尝试执行的插入、更新和删除操作。
于 2016-12-21T14:04:03.443 回答