在提交更改方法触发之前拦截 linq 生成的 TSQL

本文关键字:linq TSQL 提交 方法 | 更新日期: 2023-09-27 18:36:38

是否可以在 submitchanges() 方法触发之前拦截 linq 生成的 TSQL?我需要修改 sql 插入查询。

在提交更改方法触发之前拦截 linq 生成的 TSQL

你不能修改

SQL,但你可以截获插入过程。 生成的数据上下文应具有Insert mehod 的部分实现。 例如,如果实体已命名,则MyDbEntity

partial void InsertMyDbEntity(MyDbEntity instance);

由于这是部分的,因此可以在围绕生成的数据上下文创建的分部类中对其进行修改。 然后,可以使用此挂钩从整个布料中生成 INSERT 语句,或者只调用已编写的自定义存储过程来处理您尝试实现的任何细微差别。

这是你能做的最好的事情 - 你不能在此过程中检测现有的INSERT SQL。

是的,可以拦截SubmitChanges()调用,但不能拦截 SQL 本身。

在我的应用程序中,我的.dbml文件称为" GlobalPricing.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()调用尝试执行的操作的插入、更新和删除操作。