เป็นไปได้ไหมที่จะใช้ Asp.net Identity ใหม่กับ Database First และ EDMX หรือเฉพาะกับรหัสก่อน?
นี่คือสิ่งที่ฉันทำ:
1) ฉันสร้าง MVC5 Project ใหม่และมี Identity ใหม่สร้างตาราง User และ Roles ใหม่ในฐานข้อมูลของฉัน
2) จากนั้นฉันก็เปิดไฟล์ Database First EDMX ของฉันและลากในตาราง Identity Users ใหม่เนื่องจากฉันมีตารางอื่นที่เกี่ยวข้องกับมัน
3) เมื่อบันทึก EDMX ตัวสร้างฐานข้อมูล POCO แรกจะสร้างคลาส User โดยอัตโนมัติ อย่างไรก็ตาม UserManager และ RoleManager คาดว่าคลาส User ที่สืบทอดมาจาก Identity namespace (Microsoft.AspNet.Identity.IUser) ใหม่ดังนั้นการใช้คลาส POCO User จะไม่ได้ผล
ฉันเดาว่าวิธีแก้ปัญหาที่เป็นไปได้คือการแก้ไข POCO Generation Classes ของฉันเพื่อให้คลาส User ของฉันสืบทอดจาก IUser?
หรือ ASP.NET Identity เข้ากันได้กับ Code First Design เท่านั้น?
++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
อัปเดต: ทำตามคำแนะนำของ Anders Abel ด้านล่างนี่คือสิ่งที่ฉันทำ ได้ผล แต่ฉันสงสัยว่ามีวิธีแก้ปัญหาที่หรูหรากว่านี้หรือไม่
1) ฉันขยายคลาสผู้ใช้เอนทิตีของฉันโดยการสร้างคลาสบางส่วนภายในเนมสเปซเดียวกับเอนทิตีที่ฉันสร้างขึ้นโดยอัตโนมัติ
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; }