To pytanie rozwinęło się, więc zaktualizowałem tytuł.Migrowanie SimpleMembership to Identity 2.0
To był pierwotny tytuł: Identity 2 UserManager.Find rzuca "Nieprawidłowa nazwa obiektu 'dbo.ApplicationUser'" błąd
mam do konwersji z SimpleMembership Tożsamości 2. Mam prowadził skrypt konwersji i refaktoryzował różne pliki do użytku osobistego. Mogę zbudować i uruchomić aplikację, ale przy próbie zalogowania się zostanie zgłoszony błąd "Nieprawidłowy obiekt nazwa" dbo.ApplicationUser "na var user = UserManager.Find (vM.UserName, vM.Password);
Konto Kontroler:
[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 });
}
}
Dlaczego kierownik użytkownik próbuje uzyskać dostęp do dbo [ApplicationUser] (który nie istnieje) zamiast dbo. [AspNetUsers]?
UPDATE 1: I zdegradowany do Microsoft.AspNet.Identity.EntityFramework 1.0 i Microsoft.AspNet.Identity.Core 1,0 i teraz dostać "Nieprawidłowa nazwa obiektu 'dbo.IdentityUser'" błąd podczas UserManager.Find jest nazywany.
UPDATE 2:
I przeniesieni z powrotem do Identity 2.0 i po prostu zobaczyć, co by się stało, cofnął się i usunięte z bazy danych i regeneruje się go z kodem pierwszy (enable-migracje, update-baza).
Zamiast dodawania tabel Domyślna tożsamość:
AspNetRoles
AspNetClaims
AspNetUserLogins
AspNetUserRoles
AspNetUsers
Dodała te tabele:
dbo.ApplicationUser
dbo.IdentityRole
dbo .IdentityUserClaim
dbo.I dentityUserLogin
dbo.IdentityUserRole
Co wyjaśniłoby, dlaczego szuka on ApplicationUser. Co jest takiego w mojej konfiguracji, że wymusza nazwy zamiast standardowych nazwisk? Prawdopodobnie mógłbym zmienić mój skrypt migracyjny na te nazwy, ale w efekcie otrzymywałbym niestandardowe nazwy tabel, co prowadziłoby do zamieszania. Jak skonfigurować rzeczy, aby uzyskać domyślne nazwy tabel tożsamości?