使用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");
}
}
感谢培尼尔的发展把我带向了正确的方向。最后,我将在稍后添加错误检查。
如果我理解你的问题,你想要这样的东西:
using (var context = new Friendsdb())
{
context.UserDetails.First(userDetail => userDetail.Id == HttpContext.User.Id).IsLoggedin = true;
context.SaveChanges();
}
您必须将其作为伪代码,因为我不确定您的模型上有什么,但上面的实体框架代码是您在数据库中设置该位值所需要的。