SORU
15 EYLÜL 2012, CUMARTESİ


Nasıl özel ek alanlar oluşturmak için MVC4 içinde İlgili olarak

ASP MVC 4 yeni özellik ile karşılaştım, yeni üyelik db şema ve yeni başlatma ile birlikte gelir. Mvc 3 ve eski sürümleri geliştirici özel kullanıcı profili alanlarını web özellikleri kullanarak oluşturmak mümkün.config, ama şimdi varsayılan filtreler ad yöntem 4 proje mvc ile karşı karşıya

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

ve kullanıcı profili tablo:

[Table("UserProfile")]
    public class UserProfile
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }
        public string UserName { get; set; }
    }

Ama yöntem İnitializeDatabaseConnection diğer ek alanlar oluşturmak için ihtiyacım var sadece Kullanıcı adı ve kullanıcı Kimliği oluşturmak.

EF codeFirst yaklaşım içinde iyi bir deneyim var, ve bu durumda İlgili Sınıf düzenlemek için deneyin:

[Table("UserProfile")]
    public class UserProfile
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }
        [Column]
        [Required]
        public string UserName { get; set; }
        [Column]
        [Required]
        public string FirstName { get; set; }
        [Column]
        [Required]
        public string LastName { get; set; }
    }

Ama ben veritabanı oluştur, bende herhangi bir değişiklik, Özel Db alanları oluşturuldu. bkz. Bana lütfen yardım edin, nasıl özel kullanıcı alanları oluşturabilir miyim?

CEVAP
17 EYLÜL 2012, PAZARTESİ


Cevap yukarıda tertipleyerek

WebSecurity.InitializeDatabaseConnection Yöntemini bildiren yardımcı olur

Eğer kullanmak istediğiniz veritabanı tablosunu içeren kullanıcı profili bilgileri (kullanıcı adları, e-posta adresleri, vb.), sizin belirlediğiniz bir bağlantı dizesi ve tablo adı olan üyelik sistemi kullanır bağlanmak için bu bilgileri. Eğer mevcut kullanıcı profili bir tablo kullanmak istiyorsanız, İnitializeDatabaseConnection belirtebilirsiniz() yöntemi otomatik olarak kullanıcı profil tablo oluşturmak gerekir. (Kullanıcı profili tablosu için bir veritabanı zaten var.)

Eğer öyleyse biz sadece profil tablo oluşturma ve InitializeDatabaseConnection yöntemi çalıştırmak emin olmak için tablo sonra gerek UserProfile tabloya daha fazla alan istiyorsak yerde zaten.

Standart MVC4.0 proje Hesap denetleyicisi diye verdim VS2012 şablon

[Authorize]
//[InitializeSimpleMembership]
public class AccountController : Controller
{

ve taşındı 15* *EF Kodu İlk Veritabanı Başlatıcı içine

public class MyDatabaseInit: DropCreateDatabaseAlways<MyDatabaseContext>
{
    protected override void Seed(MyDatabaseContext context)
    {
        SeedMembership();
    }

    private void SeedMembership()
    {
        WebSecurity.InitializeDatabaseConnection("MyDatabaseContext",
            "UserProfile", "UserId", "UserName", autoCreateTables: true);
    } 
}

InitializeDatabaseConnection tablo bir kez çalışır sağlanması yer alıyor zaten.

Ekledi EF Kod benim İlk model UserProfile sınıfı

public class MyDatabaseContext : DbContext
{
    public DbSet<UserProfile> UserProfiles { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

Eklendi UserProfile tabloda ekstra alan

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string MobilePhone { get; set; }
}

Tüm ihtiyacınız şimdi ayarlamak için veritabanı başlatma stratejisi ne zaman uygulama başlar ve aynı zamanda bir arama sorgusu veritabanı emin olun alır yaratılan bu noktada, daha önce herhangi bir yetkilendirme/kimlik doğrulama kodu denir.

protected void Application_Start()
{
   AreaRegistration.RegisterAllAreas();

   WebApiConfig.Register(GlobalConfiguration.Configuration);
   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
   RouteConfig.RegisterRoutes(RouteTable.Routes);
   BundleConfig.RegisterBundles(BundleTable.Bundles);
   AuthConfig.RegisterAuth();

   Database.SetInitializer<MyDatabaseContext>(new MyDatabaseInit());
   new MyDatabaseContext().UserProfile.Find(1);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • Thom Hall

    Thom Hall

    24 Kasım 2006