从SignalR hub更新ASP MVC数据库

时间:2016-06-01 10:14:24

标签: c# asp.net-mvc signalr

有没有办法直接从SignalR中心更新默认ASP.NET MVC数据库中的字段?

如您所知,默认情况下,在新的MVC模板项目中,Visual Studio会创建3个控制器,HomeAccountManage。从这3个中可以很容易地访问数据库,如下所示:

using (var con = new ApplicationDbContext())
{
    var userID = UserManager.FindById(User.Identity.GetUserId());
    var userR = con.Users.FirstOrDefault(x => x.Id == userID.Id);

    userR.Wins = 0;
    userR.Loses = 0;
    userR.Ties = 0;

    con.SaveChanges();
}

其中UserManager默认定义如下:

private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    }
}

我正在寻找一种方法在我的SignalR Hub中做这样的事情。

2 个答案:

答案 0 :(得分:0)

据我所知,您的主要问题是在集线器类中获取当前用户ID以更新数据库中的记录。如果是这样,您可以尝试使用:

string userId = Context.User.Identity.GetUserId<string>();

所以最终的代码将是:

using (var con = new ApplicationDbContext())
{
    string userId = Context.User.Identity.GetUserId<string>();
    var userR = con.Users.FirstOrDefault(x => x.Id == userId);

    userR.Wins = 0;
    userR.Loses = 0;
    userR.Ties = 0;

    con.SaveChanges();
}

当然,这是用户ID为字符串类型

的情况

答案 1 :(得分:0)

我认为你在寻找的是:http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections

需要注意的一点是,您必须配置信号器授权才能使其正常工作。