在检查用户是否存在于数据库中时“实体类型用户不是当前上下文的模型的一部分”

时间:2016-01-18 18:49:57

标签: c# asp.net-mvc entity-framework asp.net-mvc-5

在检查用户是否存在于数据库中时,会发生“实体类型用户不是当前上下文模型的一部分”。

“抱歉我的英语不好”

这是我的背景:

public class UserContext : DbContext
{

    public UserContext() :
    base("PracticeDB")
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<PracticeDB>().ToTable("Users");
    }
    public DbSet<User> Users { get; set; }
}

查看型号:

    namespace Models.Models
{
    public class LoginModel
    {
        [Required]
        public string Name { get; set; }
        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
    }
}

控制器:

namespace Models.Controllers
{
    public class AccountController : Controller
    {
        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                User user = null;
                using (UserContext db = new UserContext())
                {
                    user = db.Users.FirstOrDefault(u => u.Name == model.Name && u.Password == model.Password);

                }
                if (user != null)
                {
                    FormsAuthentication.SetAuthCookie(model.Name, true);
                    return RedirectToAction("Users");
                }
                else
                {
                    ModelState.AddModelError("", "Пользователя с таким логином и паролем нет");
                }
            }

            return View(model);
        }

    }
}

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你的UserContext中的这一行:

modelBuilder.Entity<PracticeDB>().ToTable("Users");

需要改为:

modelBuilder.Entity<User>().ToTable("Users");

答案 1 :(得分:0)

您需要在OnModelCreating中告诉DbContext有关用户模型的信息。尝试将PracticeDB模型更改为User中的modelBuilder.Entity<PracticeDB>().ToTable("Users");