Можно ли использовать новую идентификацию Asp.net с базой данных First и EDMX? Или только с кодом?
Вот что я сделал:
1) Я создал новый проект MVC5 и создал новую Identity для создания новых таблиц User and Roles в моей базе данных.
2) Затем я открыл свой первый файл EDMX базы данных и перетащил его в новую таблицу Identity Users, так как у меня есть другие таблицы, которые относятся к ней.
3). При сохранении EDMX, первый генератор POCO базы данных автоматически создаст класс User. Однако UserManager и RoleManager ожидает, что класс User наследуется от нового пространства имен Identity (Microsoft.AspNet.Identity.IUser), поэтому использование класса пользователя POCO не будет работать.
Я предполагаю, что возможное решение состоит в том, чтобы отредактировать мои классы POCO Generation, чтобы мой класс User наследовался от IUser?
Или идентификатор ASP.NET совместим только с 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) В рамках автоматически созданного класса сущности пользователя вы должны добавить ключевое слово переопределения в следующие 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; }