我正在尝试使用新的Identity和MVC5构建身份验证,但我想“加入”一个单独的用户表来注册和管理页面。我已经阅读了很多关于扩展AspNetUser表的内容,但我非常想找到如何加入一个单独的表。我不想只是将字段添加到AspNetUser表,因为这个项目将成为其他网站应用程序的模板,并且每个项目对用户表有不同的要求,因此我相信如果我可以调整一个单独的表,它将更加简化而不是不断更改AspNetUser表。
任何代码示例都会非常受欢迎,因为我通过示例学习比解释更好!
亚历
答案 0 :(得分:1)
@Alex这是什么,它对我有用
这创建了一个自定义用户类,它继承自IdentityUser,就像ApplicationUser一样。它还定义了一个虚拟类,它是在数据库中创建用户时链接的关联配置文件类。这可以在这里作为一个自定义解决方案来完成,使它使用现有的表,你只需用数据库中的实体对象替换这里的对象,并使用指向正确数据库的连接字符串。
public class CustomUser : IdentityUser
{
public virtual CustomUserProfile CustomUserProfile { get; set; }
}
public class CustomUserProfile
{
[Key]
public Guid Id
{
get { return Guid.NewGuid(); }
private set { value = Id; }
}
public string FirstName { get; set; }
public string LastName { get; set; }
//add more items
}
public class ApplicationDbContext : IdentityDbContext<CustomUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public System.Data.Entity.DbSet<CustomUserProfile> CustomUserProfile { get; set; }
}
现在在控制器中我有:
public AccountController()
: this(new UserManager<CustomUser>(new UserStore<CustomUser>(new ApplicationDbContext())))
{
}
public AccountController(UserManager<CustomUser> userManager)
{
UserManager = userManager;
}
public UserManager<CustomUser> UserManager { get; private set; }
这将使用继承自IdentityUser的自定义用户创建一个新的UserManager对象,就像ApplicationUser那样。
添加新用户的方法有:
var user = new CustomUser() { UserName = model.UserName };
user.CustomUserProfile = new CitadelUserProfile();
user.CustomUserProfile.FirstName = model.FirstName;
var result = UserManager.Create(user, model.Password);
如果您仍然遇到迁移问题,那么您可以删除MDF文件并重新运行该应用程序,它将重新创建数据库。
答案 1 :(得分:0)
由于ASP.NET Identity使用EF Code First,您可以通过添加新的Code First类并将其添加到DbContext来将您的配置文件存储为单独的表。以下文章介绍了如何执行此操作http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates.aspx