Можно ли использовать новую идентификацию Asp.net с Database First и EDMX? Или сначала только с кодом?
Вот что я сделал:
1) Я создал новый проект MVC5, и новая идентификация создала новые таблицы пользователей и ролей в моей базе данных.
2) Затем я открыл свой EDMX-файл Database First и перетащил в новую таблицу Identity Users, поскольку у меня есть другие таблицы, которые к ней относятся.
3) После сохранения EDMX генератор POCO Database First автоматически создаст класс User. Однако UserManager и RoleManager ожидают, что класс User наследуется от нового пространства имен Identity (Microsoft.AspNet.Identity.IUser), поэтому использование класса POCO User не будет работать.
Я предполагаю, что возможное решение - отредактировать мои классы генерации POCO, чтобы мой класс пользователя унаследовал от IUser?
Или ASP.NET Identity совместим только с Code First Design?
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Обновление: следуя предложению Андерса Абеля ниже, я сделал это именно так. Это работает, но мне интересно, есть ли более элегантное решение.
1) Я расширил свой класс User объекта, создав частичный класс в том же пространстве имен, что и мои автоматически сгенерированные объекты.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Я изменил свой DataContext, чтобы он наследовал от IdentityDBContext вместо DBContext. Обратите внимание, что каждый раз, когда вы обновляете свой EDMX и повторно генерируете классы DBContext и Entity, вам придется вернуть это значение.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) В автоматически созданном классе сущности User вы должны добавить ключевое слово override в следующие 4 поля или закомментировать эти поля, поскольку они унаследованы от IdentityUser (шаг 1). Обратите внимание, что каждый раз, когда вы обновляете свой EDMX и повторно создаете классы DBContext и Entity, вам нужно будет вернуть это значение.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }