asp.net用户配置文件:如果数据库有用户,如何添加字段?

时间:2013-05-10 08:30:11

标签: c# asp.net sqlprofileprovider

我的应用程序已经存在了一段时间,因此数据库中有很多用户并且他们已经附加了配置文件数据,我现在需要在配置文件中添加一个额外的字段。

我将新字段添加到我的web.config文件中:

<add name="DefaultToOK" type="System.Boolean" defaultValue="True" />

我更新了所有相关的类和方法来分配变量:

// RegistrationData class    
...
[Display(Name = "DefaultToOKLabel", Description = "DefaultToOKDescription", ResourceType = typeof(RegistrationDataResources))]
public bool DefaultToOK { get; set; }
...

public void GetDataFromMembershipUser(MembershipUser user)
{
    WebProfile profile = WebProfile.GetProfile(user.UserName);

    ...
    if (profile.DefaultToOK != null)
        this.DefaultToOK = profile.DefaultToOK;
    ...
}

// similarly added elsewhere (User.cs, UserRegistrationService.cs and UserData POCO)

当我尝试运行并登录时,它返回异常(可以理解),因为在db中的配置文件数据中找不到该字段:

System.ServiceModel.DomainServices.Client.DomainOperationException was unhandled by user code
  Message=Load operation failed for query 'Login'. 
  A profile property does not exist for DefaultsToOK. 
  InnerException message: The settings property 'DefaultsToOK' was not found.
  ErrorCode=500 
  ...

我的问题是:如何在不抛出异常的情况下向asp_net配置文件添加新字段?

编辑:网络配置

<profile defaultProvider="AspNetSqlProfileProvider" enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="MyApp.Web.MySqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties>
    <add name="FriendlyName" />
    <add name="JobTitle" />
    <add name="TopLevelViewName" defaultValue="[ANY]" />
    <add name="TopLevelViewID" type="System.Guid" defaultValue="[null]" />
    <add name="RouteIDs" />
    <add name="TopLevelViewType" type="System.Int32" defaultValue="0" />
    <add name="PasswordQuestionAnswer" />
    <add name="Criticality" type="System.Int32" defaultValue="0" />
    <!-->add name="DefaultToOK" type="System.Boolean" defaultValue="True" /-->
  </properties>
</profile>

网络个人资料

public partial class WebProfile {

        private System.Web.Profile.ProfileBase _profileBase;

        public WebProfile() {
            this._profileBase = new System.Web.Profile.ProfileBase();
        }

        public WebProfile(System.Web.Profile.ProfileBase profileBase) {
            this._profileBase = profileBase;
        }

        public virtual string RouteIDs {
            get {
                return ((string)(this.GetPropertyValue("RouteIDs")));
            }
            set {
                this.SetPropertyValue("RouteIDs", value);
            }
        }

        public virtual string PasswordQuestionAnswer {
            get {
                return ((string)(this.GetPropertyValue("PasswordQuestionAnswer")));
            }
            set {
                this.SetPropertyValue("PasswordQuestionAnswer", value);
            }
        }

        public virtual string JobTitle {
            get {
                return ((string)(this.GetPropertyValue("JobTitle")));
            }
            set {
                this.SetPropertyValue("JobTitle", value);
            }
        }

        public virtual int TopLevelViewType {
            get {
                return ((int)(this.GetPropertyValue("TopLevelViewType")));
            }
            set {
                this.SetPropertyValue("TopLevelViewType", value);
            }
        }

        public virtual string FriendlyName {
            get {
                return ((string)(this.GetPropertyValue("FriendlyName")));
            }
            set {
                this.SetPropertyValue("FriendlyName", value);
            }
        }

        public virtual string TopLevelViewName {
            get {
                return ((string)(this.GetPropertyValue("TopLevelViewName")));
            }
            set {
                this.SetPropertyValue("TopLevelViewName", value);
            }
        }

        public virtual int Criticality {
            get {
                return ((int)(this.GetPropertyValue("Criticality")));
            }
            set {
                this.SetPropertyValue("Criticality", value);
            }
        }

        public virtual System.Guid TopLevelViewID {
            get {
                return ((System.Guid)(this.GetPropertyValue("TopLevelViewID")));
            }
            set {
                this.SetPropertyValue("TopLevelViewID", value);
            }
        }

        public static WebProfile Current {
            get {
                return new WebProfile(System.Web.HttpContext.Current.Profile);
            }
        }

        public virtual System.Web.Profile.ProfileBase ProfileBase {
            get {
                return this._profileBase;
            }
        }

        public virtual object this[string propertyName] {
            get {
                return this._profileBase[propertyName];
            }
            set {
                this._profileBase[propertyName] = value;
            }
        }

        public virtual string UserName {
            get {
                return this._profileBase.UserName;
            }
        }

        public virtual bool IsAnonymous {
            get {
                return this._profileBase.IsAnonymous;
            }
        }

        public virtual bool IsDirty {
            get {
                return this._profileBase.IsDirty;
            }
        }

        public virtual System.DateTime LastActivityDate {
            get {
                return this._profileBase.LastActivityDate;
            }
        }

        public virtual System.DateTime LastUpdatedDate {
            get {
                return this._profileBase.LastUpdatedDate;
            }
        }

        public virtual System.Configuration.SettingsProviderCollection Providers {
            get {
                return this._profileBase.Providers;
            }
        }

        public virtual System.Configuration.SettingsPropertyValueCollection PropertyValues {
            get {
                return this._profileBase.PropertyValues;
            }
        }

        public virtual System.Configuration.SettingsContext Context {
            get {
                return this._profileBase.Context;
            }
        }

        public virtual bool IsSynchronized {
            get {
                return this._profileBase.IsSynchronized;
            }
        }

        public static System.Configuration.SettingsPropertyCollection Properties {
            get {
                return System.Web.Profile.ProfileBase.Properties;
            }
        }

        public static WebProfile GetProfile(string username) {
            return new WebProfile(System.Web.Profile.ProfileBase.Create(username));
        }

        public static WebProfile GetProfile(string username, bool authenticated) {
            return new WebProfile(System.Web.Profile.ProfileBase.Create(username, authenticated));
        }

        public virtual object GetPropertyValue(string propertyName) {
            return this._profileBase.GetPropertyValue(propertyName);
        }

        public virtual void SetPropertyValue(string propertyName, object propertyValue) {
            this._profileBase.SetPropertyValue(propertyName, propertyValue);
        }

        public virtual System.Web.Profile.ProfileGroupBase GetProfileGroup(string groupName) {
            return this._profileBase.GetProfileGroup(groupName);
        }

        public virtual void Initialize(string username, bool isAuthenticated) {
            this._profileBase.Initialize(username, isAuthenticated);
        }

        public virtual void Save() {
            this._profileBase.Save();
        }

        public virtual void Initialize(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection properties, System.Configuration.SettingsProviderCollection providers) {
            this._profileBase.Initialize(context, properties, providers);
        }

        public static System.Configuration.SettingsBase Synchronized(System.Configuration.SettingsBase settingsBase) {
            return System.Web.Profile.ProfileBase.Synchronized(settingsBase);
        }

        public static System.Web.Profile.ProfileBase Create(string userName) {
            return System.Web.Profile.ProfileBase.Create(userName);
        }

        public static System.Web.Profile.ProfileBase Create(string userName, bool isAuthenticated) {
            return System.Web.Profile.ProfileBase.Create(userName, isAuthenticated);
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您以编程方式加载配置文件,请修改下面的代码以设置您的值,我相信它应该可以解决问题:

var profile = ProfileBase.Create(username);
profile.SetPropertyValue("MyGuid", aGuid);
profile.SetPropertyValue("MyString", aString);
// etc
profile.Save()

ASP.NET Profiles - Add a profile to an existing user