Этот вопрос изменился, поэтому я обновил заголовок.
Это был исходный заголовок: Identity 2 UserManager.Find выдает ошибку «Недопустимое имя объекта 'dbo.ApplicationUser'».
Я перехожу с SimpleMembership на Identity 2. Я запустил сценарий преобразования и отредактировал различные файлы для использования Identity. Я могу собрать и запустить приложение, но при попытке входа в систему выдается ошибка «Недопустимое имя объекта 'dbo.ApplicationUser'» var user = UserManager.Find (vM.UserName, vM.Password);
Контроллер учетной записи:
[RequireHttps]
[Authorize]
public class AccountController : Controller
{
private readonly IUserService _userService;
public UserManager<ApplicationUser> UserManager { get; private set; }
public AccountController()
: this(new UserService(), new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDb()))) { }
public AccountController(IUserService userService, UserManager<ApplicationUser> userManager)
{ _userService = userService; UserManager = userManager; }
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login() { return View(); }
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginVm vM)
{
if (ModelState.IsValid)
{
var user = UserManager.Find(vM.UserName, vM.Password);
if (user != null)
{
FormsAuthentication.SetAuthCookie(user.UserName, false);
return RedirectToAction("Index", "Home");
}
}
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(vM);
}
ApplicationUser:
public class ApplicationUser : IdentityUser
{
[StringLength(15)]
public new string UserName { get; set; }
public int AcId { get; set; }
public int LcId { get; set; }
public string ConfirmationToken { get; set; }
public bool IsConfirmed { get; set; }
public string PasswordResetToken { get; set; }
}
DbContext:
public class MyDb : IdentityDbContext<ApplicationUser> // DbContext
{
public MyDb() : base("MyApplicaiton") { }
// public virtual DbSet<UserProfiles> Users { get; set; }
public virtual DbSet<MyTable> MyTables { get; set; } // properties marked virtual for Mocking override
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
Почему диспетчер пользователей пытается получить доступ к dbo. [ApplicationUser] (которого не существует), а не к dbo. [AspNetUsers]?
ОБНОВЛЕНИЕ 1: я перешел на Microsoft.AspNet.Identity.EntityFramework 1.0 и Microsoft.AspNet.Identity.Core 1.0, и теперь я получаю сообщение об ошибке «Недопустимое имя объекта 'dbo.IdentityUser'», когда UserManager.Find называется.
ОБНОВЛЕНИЕ 2:
Я обновился до Identity 2.0 и просто чтобы посмотреть, что произойдет, сделал резервную копию и удалил базу данных, а затем регенерировал ее с помощью кода (enable-migrations, update-database).
Вместо добавления таблиц идентификации по умолчанию:
AspNetRoles
AspNetClaims
AspNetUserLogins
AspNetUserRoles
AspNetUsers
Он добавил следующие таблицы:
dbo.ApplicationUser
dbo.IdentityRole
dbo.IdentityUserClaim
dbo.IdentityUserLogin
dbo.IdentityUserRole
Это объясняет, почему он ищет ApplicationUser. Что в моей конфигурации заставляет использовать эти имена вместо стандартных имен удостоверений? Я, вероятно, мог бы изменить свой сценарий миграции на эти имена, но тогда я бы получил нестандартные имена таблиц, которые в дальнейшем только привели бы к путанице. Как мне настроить вещи, чтобы получить имена таблиц идентификаторов по умолчанию?