C# 当我将SqlCommand设置为通用时,SignalR SqlDependency会中断
我正在使用SignalR接收对数据库的更新。我试图使我的方法通用化,如下所示,但是,这打破了SQL依赖关系,因为当数据库发生变化时,它不会触发。我已经将问题的根源缩小到SQL命令,它似乎停止了它的工作C# 当我将SqlCommand设置为通用时,SignalR SqlDependency会中断,c#,sql,asp.net-mvc,signalr,C#,Sql,Asp.net Mvc,Signalr,我正在使用SignalR接收对数据库的更新。我试图使我的方法通用化,如下所示,但是,这打破了SQL依赖关系,因为当数据库发生变化时,它不会触发。我已经将问题的根源缩小到SQL命令,它似乎停止了它的工作 public IEnumerable<T> GetAllMessages<T>() where T : new() { var messages = new List<T>(); using (var connection
public IEnumerable<T> GetAllMessages<T>() where T : new()
{
var messages = new List<T>();
using (var connection = new SqlConnection(_connString))
{
connection.Open();
using (var command = new SqlCommand(@"SELECT * FROM [dbo]." + typeof(T).Name, connection))
{
command.Notification = null;
var dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
var row = new T();
ConvertReaderToRelevantModel(reader, row);
messages.Add(row);
}
}
}
return messages;
}
是什么阻止了它的工作?我如何解决这个问题?
typef(T)。Name
不是您所期望的。放置一个断点并查看。它实际上正是我所期望的。我使用代码优先迁移,因此我的模型类型有一个同名的匹配表。您没有名称空间吗?还有,它是复数吗?在您的示例中,表名是复数的,您的类名可能不是。名称匹配,并且该命令在第一次提取数据时起作用。问题是它不再工作了,如果数据库中有更改,SqlDependency不会启动
using (var command = new SqlCommand(@"SELECT [ID],
[Name], [Number], [DateLastUpdated] FROM [dbo].[HeartBeats]", connection))