Yeni Asp.net Kimliğini Database First ve EDMX ile kullanmak mümkün mü? Yoksa sadece kodla mı?
İşte yaptığım şey:
1) Yeni bir MVC5 Projesi yaptım ve yeni Kimliğin veritabanımda yeni Kullanıcı ve Rol tablolarını oluşturmasını sağladım.
2) Daha sonra Database First EDMX dosyamı açtım ve onunla ilgili başka tablolarım olduğu için yeni Identity Users tablosuna sürükledim.
3) EDMX'i kaydettikten sonra, Veritabanı İlk POCO oluşturucusu otomatik olarak bir Kullanıcı sınıfı oluşturacaktır. Bununla birlikte, UserManager ve RoleManager, bir Kullanıcı sınıfının yeni Kimlik ad alanından (Microsoft.AspNet.Identity.IUser) miras almasını bekler, bu nedenle POCO Kullanıcı sınıfını kullanmak işe yaramaz.
Sanırım olası bir çözüm, Kullanıcı sınıfımın IUser'dan devralınması için POCO Üretim Sınıflarımı düzenlemek olabilir mi?
Veya ASP.NET Identity yalnızca Code First Design ile uyumlu mu?
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Güncelleme: Anders Abel'ın aşağıdaki önerisini takiben, bunu yaptım. İşe yarıyor, ama daha şık bir çözüm olup olmadığını merak ediyorum.
1) Varlık Kullanıcı sınıfımı, otomatik olarak oluşturulan varlıklar ile aynı ad alanı içinde kısmi bir sınıf oluşturarak genişlettim.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) DataContext'i DBContext yerine IdentityDBContext'ten devralacak şekilde değiştirdim. EDMX'inizi her güncellediğinizde ve DBContext ve Entity sınıflarını yeniden oluşturduğunuzda, bunu tekrar buna ayarlamanız gerekeceğini unutmayın.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) Otomatik oluşturulan Kullanıcı varlık sınıfınız içinde, override anahtar sözcüğünü aşağıdaki 4 alana eklemeniz veya bu alanlara IdentityUser'dan devralındıkları için yorum yapmanız gerekir (Adım 1). EDMX'inizi her güncellediğinizde ve DBContext ve Entity sınıflarını yeniden oluşturduğunuzda, bunu tekrar buna ayarlamanız gerekeceğini unutmayın.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }