Makale Özeti

Merhabalar; Bu makalemizde sıkça karşılaştığım ve bana yöneltilen sorulardan birisini çözmeye çalışacağız. Aslında çözüm basit ve kısa, fakat büyük web projelerinde gerçekten bize sıkıntı çıkarabilecek derecede bir sorun. Çatladık nedir bu sorun dediğinizi duyar gibiyim. Sorun : Web Application üzerinde Profile Provider Kullanımı ? veya Web Application üzerinde Profile Provider nasıl kullanırım ? Daha önce web site projesi açıp web sitesi geliştiren arkadaşlarımız vardır. Burada biz Microsoft'un bize sunduğu profile yönetimini kullanıyorduk. Web.Config dosyasına yazdığımız kısa tanımlamalar ile kolayca profil özelliklerine Profile.ÖzellikAdı şeklinde erişebiliyorduk. Web Application projesi oluşturunca işin rengi değişiyor. İş hem zor hemde çıkılmaz bir hal alıyor. Bu kadar kolay kullandığımız bir özelliği neden Web projelerinde kolayca kullanmayalım değil mi? İşte tam burada aşağıda bu soruna çözüm olarak geliştirdiğim kodları kullanabilirsiniz. Kodları inceleyelim sonrasında nasıl kullanırız ne yapıyoruz kısaca anlatalım.

Makale

Merhabalar;

Bu makalemizde sıkça karşılaştığım ve bana yöneltilen sorulardan birisini çözmeye çalışacağız. Aslında çözüm basit ve kısa, fakat büyük web projelerinde gerçekten bize sıkıntı çıkarabilecek derecede bir sorun. Çatladık nedir bu sorun dediğinizi duyar gibiyim.

Sorun : Web Application üzerinde Profile Provider Kullanımı ? veya Web Application üzerinde Profile Provider nasıl kullanırım ?

Daha önce web site projesi açıp web sitesi geliştiren arkadaşlarımız vardır. Burada biz Microsoft'un bize sunduğu profile yönetimini kullanıyorduk. Web.Config dosyasına yazdığımız kısa tanımlamalar ile kolayca profil özelliklerine Profile.ÖzellikAdı şeklinde erişebiliyorduk. Web Application projesi oluşturunca işin rengi değişiyor. İş hem zor hemde çıkılmaz bir hal alıyor. Bu kadar kolay kullandığımız bir özelliği neden Web projelerinde kolayca kullanmayalım değil mi? İşte tam burada aşağıda bu soruna çözüm olarak geliştirdiğim kodları kullanabilirsiniz. Kodları inceleyelim sonrasında nasıl kullanırız ne yapıyoruz kısaca anlatalım.

[UserProfile.cs]

using System;

using System.Web;

using System.Web.Profile;

 

namespace sayduygular.com

{

    public class UserProfile : ProfileBase

    {

        [ProfileProvider("SqlProfileProvider")]

        public String Name

        {

            get { return (String)this.GetPropertyValue("Name"); }

            set { this.SetPropertyValue("Name", value); }

        }

 

        [ProfileProvider("SqlProfileProvider")]

        public String LastName

        {

            get { return (String)this.GetPropertyValue("LastName"); }

            set { this.SetPropertyValue("LastName", value); }

        }

 

        [ProfileProvider("SqlProfileProvider")]

        public Int32 Age

        {

            get { return (Int32)this.GetPropertyValue("Age"); }

            set { this.SetPropertyValue("Age", value); }

        }

 

        [ProfileProvider("SqlProfileProvider")]

        public SEX Sex

        {

            get { return (SEX)this.GetPropertyValue("Sex"); }

            set { this.SetPropertyValue("Sex", value); }

        }

 

        [ProfileProvider("SqlProfileProvider")]

        public LIFE_STATUS LifeStatus

        {

            get { return (LIFE_STATUS)this.GetPropertyValue("LifeStatus"); }

            set { this.SetPropertyValue("LifeStatus", value); }

        }

 

        [ProfileProvider("SqlProfileProvider")]

        public Boolean IsFirstLogin

        {

            get { return (Boolean)this.GetPropertyValue("IsFirstLogin"); }

            set { this.SetPropertyValue("IsFirstLogin", value); }

        }

 

        public virtual UserProfile GetProfile(string userName)

        {

            return ((UserProfile)(ProfileBase.Create(userName)));

        }

    }

}


Yukarıda verdiğim UserProfile sınıfı ProfileBase sınıfından miras alınarak türetilmiştir. ProfileProvider attribute'u ile özelliklerin birer profil özelliği olduğu bildiriliyor ki Web.Config üzerine tekrar yazmamız gerekmeyecek. GetProfile metodu ile o username'e ait tüm profil bilgilerini alıyoruz ;)

[BasePage.cs]

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

namespace sayduygular.com

{

    public class BasePage : System.Web.UI.Page

    {

        public BasePage() : base() { }

 

        public UserProfile Profile

        {

            get { return (UserProfile)HttpContext.Current.Profile; }

        }

    }

}



BasePage sınıf'ımız ise Page sınıfımız'dan türemiştir. Oluşturduğumuz bütün sayfaları bu sınıftan miras alarak oluşturacağız. Sınıf içerisinde bulunan Profile özelliği ile o an aktif olan kullanıcı'ya ait UserProfile sınıfını geri döndürecek. En son olarak bir şey daha yapmamız gerekiyor. Web.Config dosyamızda provider'ımızı UserProfile sınıfında miras alacak şekilde yapılandırmamız gerekiyor. Bunun nedeni ise profile bilgilerini tekrardan web.config'de tanımlama ihtiyacımızı ortadan kaldırmak.

<profile defaultProvider="SqlProfileProvider" enabled="true" automaticSaveEnabled="false" inherits="sayduygular.com.UserProfile">

inherits="sayduygular.com.UserProfile" şeklinde yazdığımızı dikkat ediniz. Diğer kısımları siz kendi uygulamanızı göre gelitiriniz. Provider ayarlarının tam görünümü :

<roleManager enabled="true" cookieRequireSSL="false" />

      <profile defaultProvider="SqlProfileProvider" enabled="true" automaticSaveEnabled="false" inherits="sayduygular.com.UserProfile">

          <providers>

              <clear/>

              <add name="SqlProfileProvider"

                   type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

                   connectionStringName="LocalSQLServer"

                   applicationName="SafDuygular.com" />

          </providers>

      </profile>

Mehmet KURT
Teşekkürler

www.mehmetkurt.net