c# - 在 DDL 执行期间修改了 SqlTableDependency 引用的实体“INSERTED”
问题描述
使用的IDE:
- 微软 Visual Studio 社区 2019
使用的语言:
- 带有 c# 的 Asp.net (Razor Pages)
使用的库:
- 信号R
- SqlTableDependency
问题解释:
对数据库的初始调用运行良好,没有任何错误,并且使用 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++ - 错误:使用未声明的标识符 VS 代码
- java - 如何使用 Java 驱动程序从 MongoDB 文档中动态获取 ArrayOfObjects 的值
- python - 为什么这个问题的答案是假的?
- python - 此代码无法用随机符号替换坏词
- micronaut - 是否可以跳过某些 HTTP 状态代码的 Micronaut 断路器?
- c - 链接到包含全局变量的静态库时,clang 和 gcc-10 之间的行为不同
- php - 发送网络表单:不允许信封发件人
- angular - 动态加载页面时如何导航回上一页而不重新加载
- docker - minikube - kompose up --> WARN 不支持主机“/home/robin/Dokumente/Blacklisting_Ult/db_data”上的卷挂载?
- django - 在 django 模型中编写 def __str__(self) 的更好方法