使用MVC 5更改MS SQL/View Studio 2013中的值

本文关键字:2013 Studio View MVC 更改 MS SQL 使用 | 更新日期: 2023-09-27 18:00:30

我一直在尝试在我的MS SQL/MVC 5应用程序中编辑一个简单的位值,但我完全被卡住了。如果用户登录,我要做的是将一个位值设置为true。问题是,我不知道如何正确访问数据、更改信息并将其发布回SQL server。

我试图访问的代码生活在一个经过修改的ASP.net身份数据库中。因此,使用迁移以及此处概述的所有其他相关过程来执行属性和表条目:http://go.microsoft.com/fwlink/?LinkID=317594.为了满足应用程序的需要,我制作了一个简单的Friends模型。

这是模型的代码:

public class Friendsdb : DbContext
{
    public Friendsdb() : base("name=DefaultConnection")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       ..// irrelevant code
    }
    public DbSet<ApplicationUser> UserDetails { get; set; } //has the IsLoggedin bit value
    }
}

简言之,我使用了基本的路线,以便采取适当的行动。即:

    public ActionResult Ifloggedin()
    {
        if(User.Identity.IsAuthenticated && ModelState.IsValid)
        {
            ;
        }
        return View();
    }

我省略了一些代码,因为它不起作用。我试过几次编辑比特值,但都失败了。如果有人能在这方面引导我朝着正确的方向前进,我将不胜感激。

更新:

在实现建议的解决方案时,我收到了以下验证错误:EntityType"IdentityUserLogin"未定义键。经过一番研究,我能够实现在这篇帖子上找到的答案。

有了这个错误,"序列不包含任何元素"给我带来了麻烦。这是通过在peinearydevelopment的答案中使用"FirstOrDefault"而不是"First"来解决的,然而,当我被雇佣时,我会遇到以下错误:"对象引用没有设置为对象的实例。"

我尝试了十几种不同的建议来解决这个问题,但都没有奏效。一个非常弱的猜测是DB.UserDetails是一个空值,目前,我不确定如何纠正这个问题。

更新二:

似乎有一个由Microsoft构建的上下文应该在更新标识字段时使用,称为:IdentityDbContext。一旦我研究并找出了正确的语法,我就能够更新值。正确的代码如下:

    public ActionResult IsUserLoggedIn ()
    {
        var UserId = HttpContext.User.Identity.GetUserId().ToString();
        if (ModelState.IsValid && HttpContext.User.Identity.IsAuthenticated)
        {
            IdentityDbContext<ApplicationUser> db = new IdentityDbContext<ApplicationUser>();
            db.Users.First(u => u.Id == UserId).IsUserOnline = true;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            return RedirectToAction("Index");
        }
    }

感谢培尼尔的发展把我带向了正确的方向。最后,我将在稍后添加错误检查。

使用MVC 5更改MS SQL/View Studio 2013中的值

如果我理解你的问题,你想要这样的东西:

using (var context = new Friendsdb())
{
  context.UserDetails.First(userDetail => userDetail.Id == HttpContext.User.Id).IsLoggedin = true;
  context.SaveChanges();
}

您必须将其作为伪代码,因为我不确定您的模型上有什么,但上面的实体框架代码是您在数据库中设置该位值所需要的。