Có thể sử dụng Asp.net Identity mới với Database First và EDMX không? Hay chỉ với mã đầu tiên?
Đây là những gì tôi đã làm:
1) Tôi đã tạo một Dự án MVC5 mới và có Identity mới tạo bảng Người dùng và Vai trò mới trong cơ sở dữ liệu của tôi.
2) Sau đó, tôi mở tệp Cơ sở dữ liệu đầu tiên EDMX của mình và kéo vào bảng Người dùng danh tính mới vì tôi có các bảng khác liên quan đến nó.
3) Khi lưu EDMX, trình tạo POCO trên Cơ sở dữ liệu sẽ tự động tạo một lớp Người dùng. Tuy nhiên, UserManager và RoleManager mong đợi một lớp Người dùng kế thừa từ không gian tên Identity mới (Microsoft.AspNet.Identity.IUser), vì vậy việc sử dụng lớp Người dùng POCO sẽ không hoạt động.
Tôi đoán một giải pháp khả thi là chỉnh sửa Lớp thế hệ POCO của tôi để lớp Người dùng của tôi kế thừa từ IUser?
Hay ASP.NET Identity chỉ tương thích với Code First Design?
+++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Cập nhật: Theo gợi ý của Anders Abel bên dưới, đây là những gì tôi đã làm. Nó hoạt động, nhưng tôi tự hỏi nếu có một giải pháp thanh lịch hơn.
1) Tôi đã mở rộng thực thể Lớp người dùng của mình bằng cách tạo một lớp một phần trong cùng không gian tên với các thực thể được tạo tự động của tôi.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Tôi đã thay đổi DataContext của mình để kế thừa từ IdentityDBContext thay vì DBContext. Lưu ý rằng mỗi khi bạn cập nhật EDMX của mình và tạo lại các lớp DBContext và Entity, bạn sẽ phải đặt điều này trở lại.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) Trong lớp thực thể Người dùng được tạo tự động của bạn, bạn phải thêm từ khóa ghi đè vào 4 trường sau hoặc nhận xét các trường này vì chúng được kế thừa từ IdentityUser (Bước 1). Lưu ý rằng mỗi khi bạn cập nhật EDMX của mình và tạo lại các lớp DBContext và Entity, bạn sẽ phải đặt điều này trở lại.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }