实体框架启用 - 迁移-EnableAutomaticMigrations?

时间:2015-06-20 20:31:53

标签: c# forms entity-framework asp.net-mvc-4 forms-authentication

我正在使用表单Authnetication,我使用了自己的Entity Framework,并且还使用了DataContext为用户提供了角色。我已经将DataCOntectInitializer硬编码如下

public class DataContextInitializer:CreateDatabaseIfNotExists     {         protected override void Seed(DataContext context)         {             角色role1 =新角色{RoleName =" Admin" };             角色role2 =新角色{RoleName =" User" };

        User user1 = new User { Username = "admin", EmailId = "admin@ymail.com", FirstName = "Admin", Password = "123456", IsActive = true, DateCreated = DateTime.UtcNow, Roles = new List<Roles>() };

        User user2 = new User { Username = "user1", EmailId = "user1@ymail.com", FirstName = "User1", Password = "123456", IsActive = true, DateCreated = DateTime.UtcNow, Roles = new List<Roles>() };

        user1.Roles.Add(role1);
        user2.Roles.Add(role2);

        context.Users.Add(user1);
        context.Users.Add(user2);

        context.SaveChanges();
    }
}

我的登录方法是:

[HttpPost]         [使用AllowAnonymous]

    public ActionResult Login(LoginViewModel model, string returnUrl=" ")
    {
        if (ModelState.IsValid)
        {
            var user1 = Context.Users.Where(u => u.Username == model.Username && u.Password == model.Password).FirstOrDefault();
            var user = ob.Users.Where(u => u.Username == model.Username && u.Password == model.Password).FirstOrDefault();
            if (user != null)
            {
                var roles = user.Roles.Select(m => m.RoleName).ToArray();
                CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel();
                serializeModel.UserId = user.UserId;
                serializeModel.FirstName = user.FirstName;
                serializeModel.LastName = user.LastName;
                serializeModel.roles = roles;


                string userData = JsonConvert.SerializeObject(serializeModel);
                FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, user1.EmailId, DateTime.Now, DateTime.Now.AddMinutes(15), false, userData);

                string encTicket = FormsAuthentication.Encrypt(authTicket);
                HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
                Response.Cookies.Add(faCookie);
                if ( roles.Contains("Admin"))
                {
                    return RedirectToAction("Index", "Admin");
                }
                else if (roles.Contains("User"))
                {
                    return RedirectToAction("Index", "User");
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }

        }
        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }

我的Model类如下:

公共类用户     {

    public int UserId { get; set; }
    [Required]
    public String Username { get; set; }
    [Required]
    public String EmailId { get; set; }

    [Required]
    public String Password { get; set; }

    public String FirstName { get; set; }
    public String LastName { get; set; }

    public Boolean IsActive { get; set; }
    public DateTime DateCreated { get; set; }


    public virtual ICollection<Roles> Roles { get; set; }
}

公共类角色     {

    [Key]
    public int RoleId { get; set; }

    [Required]
    public string RoleName { get; set; }
    public string Description { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

问题就像当我尝试使用我的用户名和密码登录时,需要从DatContext类中检查角色。

但是当时我的角色不是来自DataContext类,它给出了ArgumentNullException。

1 个答案:

答案 0 :(得分:0)

请参阅@ Oliboy50(Entity Framework 6 - Handling loading of nested objects)回答的这篇文章,这可能会有所帮助,您需要包含虚拟角色以便加载集合