将 SignalR 与实体框架结合使用来轮询数据库



>我正在尝试 a.NET MVC5应用程序中实现SignalR。我正在使用 EF 6.0.0 和 SignalR 2.2.3。每当数据库中发生一些更改(更新,插入,删除)时,我想更新客户端屏幕。我搜索了一下,找到了几篇文章,展示了如何设置 SignalR 以发送聊天等实时消息,还有一些文章展示了如何执行我想做的事情,但使用 ADO.NET 而不是 EF。这是我发现的一篇文章,它使用 ADO.NET 来实现同样的事情。除了使用 EF 之外,我该怎么做才能实现相同的操作?下面是处理该过程 ADO.NET 部分的文章中的代码片段:

public class JobInfoRepository {
public IEnumerable<JobInfo> GetData()
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(@"SELECT [JobID],[Name],[LastExecutionDate],[Status]
FROM [dbo].[JobInfo]", connection))
{
// Make sure the command object does not already have
// a notification object associated with it.
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
using (var reader = command.ExecuteReader())
return reader.Cast<IDataRecord>()
.Select(x => new JobInfo(){ 
JobID = x.GetInt32(0), 
Name = x.GetString(1), 
LastExecutionDate = x.GetDateTime(2),  
Status  = x.GetString(3) }).ToList();                            
}
}        
}

我也阅读了文章中的评论,有些人说dependency_OnChange方法正在不断触发。难道不应该只在我们更改数据库中的某些内容时才触发它吗?如果它应该连续触发,我们不妨使用简单的 ajax 轮询并每秒轮询一次 db,对吧?

是否有另一篇文章可以解释使用 SignalR 的 EF?谢谢

经过更多的研究,我发现在配置集线器时不能使用 EF 代替 ADO.NET:

using (SqlCommand command = new SqlCommand(@"SELECT [JobID],[Name],[LastExecutionDate],[Status]
FROM [dbo].[JobInfo]", connection))

因为它使用SqlCommand而不是任何 lamba 表达式。

最新更新