首页 > 解决方案 > 如何最小化 SqlTableDependency 中的调用

问题描述

如果在一个表中插入 100 行,那么应该只发送一个调用来获取值。

public static void InitiateSQLTableDependency()
    {
        try
        {
            var mapper = new ModelToTableMapper<DeviceValuesProperties>();
            mapper.AddMapping(deviceValue => deviceValue.DeviceId, "DeviceId");
            mapper.AddMapping(deviceValue => deviceValue.TimeStamp, "TimeStamp");

            tableDependency = new SqlTableDependency<DeviceValuesProperties>(connectionString, "DeviceValues", mapper);
            tableDependency.OnChanged += OnDependencyChange;
            tableDependency.OnError += OnDependencyError;
            tableDependency.Start();
            isSQLDependencyStart = true;
        }
        catch (Exception exception)
        {
            throw exception;
        }
        }

标签: c#signalr

解决方案


可悲的是,它不是那样工作的(假设您使用的是这个库 [ https://github.com/christiandelbianco/monitor-table-change-with-sqltabledependency]甚至是标准的 SqlDependency。你希望它多久触发一次?每 100 行?还是每 x 个时间单位?为什么不经常轮询表?如果您希望它自动但批量 - 您应该查看 CDC、CDT 或自己编写触发器;

https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/work-with-change-tracking-sql-server?view=sql-server-2017


推荐阅读