2011-11-07 8 views
5

私はウェブサイトからウェブアプリケーションに移動して改善しました。私のウェブサイトにはプロフィールがあります。ウェブアプリケーションでのプロファイルの使用方法

私のプロファイルは機能しませんでしたので、System.Web.ProfileProviderを実装し、ProfileButtonを継承したProfileCommonクラスを作成します.HttpContext.Current.Profile.SetPropertyValueとGetPropertyValueを使用します。それは動作しますが、問題は、HttpContext.Current.ProfileがProfileProviderメソッドを呼び出さないため、論理的にバグがあります。どのようにこれを修復できますか?または、Webアプリケーションのプロファイルのための他の実装がありますか?

public class ProfileCommon : ProfileBase 
{ 
    public string FirstName 
    { 
     get 
     { 
      return HttpContext.Current.Profile.GetPropertyValue("FirstName").ToString(); 
     } 
     set 
     { 
      HttpContext.Current.Profile.SetPropertyValue("FirstName", value); 
     } 
    } 
} 
web.configファイルで

<profile inherits="BaniBookWebApp.Code.Core.ProfileCommon"> 
    <providers> 
    <add name="CustomProfileProvider" type="BaniBookWebApp.Code.Core.CustomProfileProvider"/> 
    </providers>  
</profile> 

CustomProfileProvider:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using eLearn2Model; 
using System.Collections; 
using System.Configuration; 

namespace AccessControl 
{ 
    public class ProfileProvider : System.Web.Profile.ProfileProvider 
    { 
     public ProfileProvider() 
     { 
     } 

     public override int DeleteInactiveProfiles(System.Web.Profile.ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate) 
     { 
      int res = -1; 
      using (var db = new eLearn2Entities()) 
      { 
       List<Profile> profiles = (from m in db.Profiles 
               where (m.LastUpdatedDate.CompareTo(userInactiveSinceDate) < 0) 
               select m).ToList(); 
       foreach (Profile profile in profiles) 
       { 
        if (profile != null) 
        { 
         db.Profiles.DeleteObject(profile); 
         res = db.SaveChanges(); 
        } 
       } 
      } 
      return res; 
     } 

     public override int DeleteProfiles(string[] usernames) 
     { 
      int res = -1; 
      using (var db = new eLearn2Entities()) 
      { 
       foreach (string username in usernames) 
       { 
        Profile profile = (from m in db.Profiles 
               join n in db.Users on m.UserId equals n.UserId 
               where n.UserName == username 
               select m).SingleOrDefault(); 
        if (profile != null) 
        { 
         db.Profiles.DeleteObject(profile); 
         res = db.SaveChanges(); 
        } 
       } 
      } 
      return res; 
     } 

     public override int DeleteProfiles(System.Web.Profile.ProfileInfoCollection profiles) 
     { 
      throw new NotImplementedException(); 
     }  

     public override System.Configuration.SettingsPropertyValueCollection GetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection collection) 
     { 
      System.Configuration.SettingsPropertyValueCollection spvc = new System.Configuration.SettingsPropertyValueCollection(); 
      lock (collection.SyncRoot) 
      { 
       foreach (object item in collection) 
       { 
        SettingsProperty sp = (SettingsProperty)item; 
        SettingsPropertyValue spv = new SettingsPropertyValue(sp); 
        spvc.Add(spv); 
       } 
      } 
      return spvc; 
     } 

     public override void SetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyValueCollection collection) 
     { 
      string PropertyNames_ = string.Empty; 
      string PropertyValuesString_ = string.Empty; 
      string userID = string.Empty; 
      lock (collection.SyncRoot) 
      { 
       foreach (object item in collection) 
       { 
        SettingsPropertyValue spv = (SettingsPropertyValue)item; 
        if (spv.PropertyValue != null) 
        { 
         if (!string.IsNullOrEmpty(spv.PropertyValue.ToString())) 
         { 
          if (spv.Name.Equals("UserID")) 
          { 
           userID = spv.PropertyValue.ToString(); 
          } 
          else 
          { 
           PropertyNames_ += spv.Name + ";"; 
           PropertyValuesString_ += spv.PropertyValue.ToString() + ";"; 
          } 
         } 
        } 
       }//foreach    
      }//lock 

      try 
      { 
       using (var db = new eLearn2Entities()) 
       { 
        bool isAuthenticated = bool.Parse(context["IsAuthenticated"].ToString()); 

        Profile profile = new Profile() 
        { 
         UserId = Guid.Parse(userID),      
         PropertyValuesString = PropertyValuesString_, 
         PropertyNames = PropertyNames_, 
         LastUpdatedDate = DateTime.UtcNow 
        }; 
        db.Profiles.AddObject(profile); 
        db.SaveChanges(); 
       } 
      } 
      catch 
      { 
       using (var db = new eLearn2Entities()) 
       { 
        //bookmark gives me an error said multiple record 
        Guid myID = Guid.Parse(userID); 
        Profile existed_profile = db.Profiles.Where 
         (item => item.UserId == myID).SingleOrDefault() as Profile; 

        existed_profile.PropertyValuesString = PropertyValuesString_; 
        existed_profile.PropertyNames = PropertyNames_; 
        existed_profile.LastUpdatedDate = DateTime.UtcNow; 

        db.Profiles.ApplyOriginalValues(existed_profile); 
        db.SaveChanges(); 
       } 

      } 
     } 
    } 
} 
+0

カスタムプロファイルプロバイダの実装を表示できますか? –

答えて

3

あなたはweb.configファイルの "真" =有効に追加しようとしていますか?

<profile inherits="BaniBookWebApp.Code.Core.ProfileCommon" enabled="true"> 
関連する問題