Чи можна використовувати новий Asp.net Identity з Database First та EDMX? Або лише з кодом спочатку?
Ось що я зробив:
1) Я створив новий проект MVC5 і запропонував новій ідентифікації створити нові таблиці користувачів і ролей у моїй базі даних.
2) Потім я відкрив свій файл бази даних First EDMX і перетягнув нову таблицю Identity Users, оскільки у мене є інші таблиці, які стосуються цього.
3) Після збереження EDMX генератор бази даних First POCO автоматично створить клас користувача. Однак UserManager та RoleManager очікує клас користувача, який успадковується з нового простору імен Identity (Microsoft.AspNet.Identity.IUser), тому використання класу користувача POCO не буде працювати.
Я думаю, можливим рішенням є редагування моїх класів генерації POCO, щоб мій клас користувача успадковувався від IUser?
Або ASP.NET Identity сумісний лише з Code First Design?
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Оновлення: Відповідно до пропозиції Андерса Абеля нижче, це те, що я зробив. Це працює, але мені цікаво, чи є більш елегантне рішення.
1) Я розширив свій клас User 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; }