5

EF Code First ile oynuyorum ve şimdi özel bir MembershipProvider uygularken sorunla karşılaştım. EF Kod Birinci İçin Membership Kullanıcı ve Varlık Çerçeve Kodu İlk

böyle kendi kullanıcı sınıfını yarattı: Ben de zaten EF için benim özel MembershipProvider bazı işlevlerini uygulamaya

public class User 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 
    [Required] 
    public string UserName { get; set; } 
    [Required] 
    public string Password { get; set; } 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    public bool IsApproved { get; set; } 
    public DateTime? LastLoginDate { get; set; } 
    public DateTime? LastActivityDate { get; set; } 
    [Required] 
    public DateTime CreationDate { get; set; } 
    [Required] 
    public string ApplicationName { get; set; } 
} 

, ama bazıları şimdi bir parametre veya iki sıra MembershipUser gerektirir geri dönüş değeri.

public MembershipUser GetUser(string username, bool userIsOnline) 

ilk düşüncem MembershipUser benim Kullanıcı sınıfını miras, ama sonra ben Özellikleri üzerindeki kontrolü kaybeder. Bu ilk EF Kodu ile bile çalışır mı?

Alternatif bir fikir, kullanıcı sınıfım için bir ToMembershipUser() yöntemi oluşturmaktır. Bu bir seçenek mi? Ne düşünmeliyim?

Bunu halletmenin en iyi yolu nedir?

cevap

8

Bu sorunu çözmek için Bağdaştırıcı Kalıbı'nı kullanabilirsiniz.

public class CustomUser : MembershipUser 
{ 
    public CustomUser(string providername, 
        User userAccount) : 
     base(providername, 
         userAccount.UserName, 
         userAccount.Id, 
         userAccount.Email, 
         passwordQuestion, 
         string.Empty, 
         true, 
         false, 
         userAccount.CreationDate, 
         userAccount.LastLoginDate, 
         userAccount.LastActivityDate, 
         new DateTime(), 
         new DateTime()) 
    { 
     UserAccount = userAccount; 
    } 

    public User UserAccount { get; private set; } 
} 

Temel modelinize geçirilen parametreleri, varlık modelinizin sahip olduğuna bağlı olarak özelleştirin.

+0

Bu mükemmel çalışıyor gibi görünüyor, teşekkürler! – magnattic

+0

"CustomUser" öğesini "MembershipUser" den miras bıraktım ve sorun, "CustomUser" öğesini Entity Framework kullanarak veritabanına kaydederken ortaya çıktı. Birisi SQL kodunu kullanacaksa, özel MembershipUser için resmi nasıl yapılır: [Nasıl Yapılır: Özel Üyelik Kullanıcısı Uygulaması] (http://msdn.microsoft.com/en-us/library/ms366730.aspx) – twnaing

+1

'Notomple '' veri notuyla 'CusomUser' sınıfına açıklama eklemeyi unutma. Aksi takdirde, 'CustomUser' Benzersiz Anahtar içermeyen hakkında hata alırsınız. – twnaing

İlgili konular