Czy można używać nowej tożsamości Asp.net z usługami Database First i EDMX? Czy tylko z kodem na początku?
Oto co zrobiłem:
1) Zrobiłem nowy projekt MVC5 i poleciłem, aby nowa tożsamość utworzyła nowe tabele użytkowników i ról w mojej bazie danych.
2) Następnie otworzyłem mój plik Database First EDMX i przeciągnąłem do nowej tabeli Identity Users, ponieważ mam inne tabele, które się z nią wiążą.
3) Po zapisaniu EDMX, generator Database First POCO automatycznie utworzy klasę użytkownika. Jednak UserManager i RoleManager oczekują klasy User dziedziczącej z nowej przestrzeni nazw tożsamości (Microsoft.AspNet.Identity.IUser), więc użycie klasy POCO User nie będzie działać.
Wydaje mi się, że możliwym rozwiązaniem jest edycja moich klas generacji POCO, aby moja klasa użytkownika dziedziczyła po IUser?
A może ASP.NET Identity jest zgodne tylko z Code First Design?
+++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Aktualizacja: Postępując zgodnie z sugestią Andersa Abla poniżej, zrobiłem to. To działa, ale zastanawiam się, czy istnieje bardziej eleganckie rozwiązanie.
1) Rozszerzyłem klasę użytkownika jednostki, tworząc klasę częściową w tej samej przestrzeni nazw, co moje automatycznie generowane jednostki.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Zmieniłem mój DataContext na dziedziczenie z IdentityDBContext zamiast DBContext. Zauważ, że za każdym razem, gdy aktualizujesz EDMX i ponownie generujesz klasy DBContext i Entity, będziesz musiał ustawić to z powrotem na to.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) W ramach automatycznie generowanej klasy encji użytkownika musisz dodać słowo kluczowe override do następujących 4 pól lub skomentować te pola, ponieważ są one dziedziczone po IdentityUser (krok 1). Zauważ, że za każdym razem, gdy aktualizujesz EDMX i ponownie generujesz klasy DBContext i Entity, będziesz musiał ustawić to z powrotem na to.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }