订阅数据库中的行更改并推送,如果客户端有任何更改

时间:2013-01-31 10:24:04

标签: asp.net-mvc system.reactive sqldependency subscribe

我首先使用EF代码在asp.net mvc中构建在线拍卖应用程序,目前我每隔5秒通过ajax更新最新的出价金额。有没有其他方法可以实现相同的

例如,订阅数据行,该数据行更新任何最新出价金额的UI元素。 例如:

Bid bid = _bidService.GetLatestBid(auctionId)
bid.Subscribe();    
uielement.Update(bid.amount),

我可以使用SQLDependency并且可能是dotnet被动扩展吗?任何机构都有任何示例代码或解决方案?

1 个答案:

答案 0 :(得分:2)

首先在数据库上启用sql dependency

接下来,从SqlCommand创建SqlDependency并使用Observable.FromEventPattern将事件转换为observable。

示例代码:

public class SqlDependencyObservable : ObservableBase<SqlNotificationEventArgs>
{
    private readonly SqlCommand _command;
    public SqlDependencyObservable(SqlCommand command)
    {
        _command = command;
    }

    protected override IDisposable SubscribeCore(IObserver<SqlNotificationEventArgs> observer)
    {
        SqlDependency dependency = new SqlDependency(_command);

        return Observable.FromEventPattern<OnChangeEventHandler, SqlNotificationEventArgs>
            (addHandler: handler => dependency.OnChange += handler, removeHandler: handler => dependency.OnChange -= handler)
            .Select(i => i.EventArgs)
            .Subscribe(observer);
    }
}