首页 > 解决方案 > 在 DDL 执行期间修改了 SqlTableDependency 引用的实体“INSERTED”

问题描述

使用的IDE:

使用的语言:

使用的库:

问题解释:

对数据库的初始调用运行良好,没有任何错误,并且使用 Ajax 调用位于页面模型内部的方法,检索到的数据正确显示在剃刀页面中。
但是
每当我在数据库中进行更改时,它都会收到一条错误消息:

System.Data.SqlClient.SqlException:“引用的实体“插入”在 DDL 执行期间被修改。请重试操作。

我不确定是什么导致了我的这个问题,即使它为我捕获了上述异常;它正在继续阅读更改并将它们应用到 asp 页面中。
谁能指导我如何避免这种异常?

相关方法

public class SkidRepository : ISkidRepository
{
    private SqlTableDependency<Stream> _sqlTableDependencyForSkid;
    private readonly IHubContext<StreamsHub> _hubContext;
    private string _connectionString = "";
    private readonly string startDateTimeFormat = "yyyy-MM-dd 00:00:00";
    private readonly string endDateTimeFormat = "yyyy-MM-dd 23:59:59";
    private DateTime dateTime;
    public SkidRepository(IConfiguration configuration, IHubContext<StreamsHub> hubContext)
    {
        _connectionString = configuration.GetConnectionString("DBConnection");
        _hubContext = hubContext;
        InitSqlTableDependancy();
    }

    public List<Skid> GetAllSkids()
    {
        var skids = new List<Skid>();
        try
        {
            using (var sqlConnection = new SqlConnection(_connectionString))
            {
                sqlConnection.Open();
                using (var sqlCommand = sqlConnection.CreateCommand())
                {
                    sqlCommand.CommandText = "SELECT Distinct [sID] FROM dbo.TableName";
                    using (var sqlDataReader = sqlCommand.ExecuteReader())
                    {
                        while (sqlDataReader.Read())
                        {
                            var id = sqlDataReader["sID"].ToString();
                            skids.Add(new Skid { ID = id });
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        return skids;
    }

    public void InitSqlTableDependancy()
    {
        var mapper = new ModelToTableMapper<Stream>();
        mapper.AddMapping(c => c.ID, "sID");
        _sqlTableDependencyForSkid = new SqlTableDependency<Stream>(_connectionString, "DatabaseName", mapper: mapper);
        _sqlTableDependencyForSkid.OnChanged += SqlTableDependancyOnChanged;
        _sqlTableDependencyForSkid.OnError += SqlTableDependancyOnError;
        _sqlTableDependencyForSkid.Start();
    }

    private void SqlTableDependancyOnError(object sender, ErrorEventArgs e)
    {
        Console.WriteLine($"SqlTableDependency error: {e.Error.Message}");
    }

    private void SqlTableDependancyOnChanged(object sender, RecordChangedEventArgs<Stream> e)
    {
        if (e.ChangeType != ChangeType.None)
        {
            _hubContext.Clients.All.SendAsync("updateSList");
        }
    }
}

截屏

在此处输入图像描述

标签: c#asp.netsql-serversignalrsqldependency

解决方案


推荐阅读