I am migrating my old website from PHP to C# MVC. I want to use Microsoft's Identity set-up as it looks rather neat.
I already have my solution set up using database-first entity framework. I have the required tables (Users, UserRoles, UserLogins, UserClaims) with all of the foreign keys set up.
I've looked at a few ways of setting up the IdentityUser, ones that have used MySqlDatabase and code first, but I'm not sure how to implement my IdentityUser when I already have an established database, including an existing Users table.
I want my IdentityUser to manipulate my Users using the Entity Framework classes that I've already created. Is there a way of making my User model in EF to derive from IdentityUser and match my existing database?
One thing specifically that I am struggling with is that my database doesn't use a string value as the primary key, it uses an auto-incrementing int.
At the moment I have the following class:
// Copyright (c) KriaSoft, LLC. All rights reserved. See LICENSE.txt in the project root for license information.
namespace KriaSoft.AspNet.Identity.EntityFramework
{
using Microsoft.AspNet.Identity;
using System;
public partial class IdentityUser : IUser<int>
{
/// <summary>
/// Default constructor
/// </summary>
public IdentityUser()
{
Id = Guid.NewGuid().ToString();
}
/// <summary>
/// Constructor that takes user name as argument
/// </summary>
/// <param name="userName"></param>
public IdentityUser(string userName)
: this()
{
UserName = userName;
}
/// <summary>
/// User ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// User's name
/// </summary>
public string UserName { get; set; }
/// <summary>
/// Email
/// </summary>
public virtual string Email { get; set; }
/// <summary>
/// True if the email is confirmed, default is false
/// </summary>
public virtual bool EmailConfirmed { get; set; }
/// <summary>
/// The salted/hashed form of the user password
/// </summary>
public virtual string PasswordHash { get; set; }
/// <summary>
/// A random value that should change whenever a users credentials have changed (password changed, login removed)
/// </summary>
public virtual string SecurityStamp { get; set; }
/// <summary>
/// PhoneNumber for the user
/// </summary>
public virtual string PhoneNumber { get; set; }
/// <summary>
/// True if the phone number is confirmed, default is false
/// </summary>
public virtual bool PhoneNumberConfirmed { get; set; }
/// <summary>
/// Is two factor enabled for the user
/// </summary>
public virtual bool TwoFactorEnabled { get; set; }
/// <summary>
/// DateTime in UTC when lockout ends, any time in the past is considered not locked out.
/// </summary>
public virtual DateTime? LockoutEndDateUtc { get; set; }
/// <summary>
/// Is lockout enabled for this user
/// </summary>
public virtual bool LockoutEnabled { get; set; }
/// <summary>
/// Used to record failures for the purposes of lockout
/// </summary>
public virtual int AccessFailedCount { get; set; }
}
}
Of course, my Users entity within my Entity Framework database context already has all of these properties, so it seems a bit pointless having them specified in there as well as my context... I'm really not sure :(.
I guess my question is: How do use my existing entity framework User model (database first) as my IdentityUser for Asp.net Identity?

Identity.IdentityUser, remove duplicated fields from the class, add missing fields into the database table. CreateUserManagerthat inherits fromUserManager<KriaSoft.IdentityUser>. Should be very simple, not even worth an answer, just a comment -)DbContextfromIdentityDbContext<ApplicationUser>, but don't need another one, unless you want to make 2 contexts. And if your context already implement these properties/tables, just remove them from your context.