Note that there are some explanatory texts on larger screens.

plurals
  1. POasp.net User Profile: how do I add a field once the DB has Users?
    text
    copied!<p>My App has been live for some time now so there are many users in the db and they already have profile data attached, I now need to add an extra field to the profile. </p> <p>I added the new field to my web.config file:</p> <p><code>&lt;add name="DefaultToOK" type="System.Boolean" defaultValue="True" /&gt;</code></p> <p>I updated all the relevant classes and methods to assign the variable:</p> <pre><code>// 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) </code></pre> <p>When I try to run and login, it comes back with an exception (understandably) as the field is not found in the profile data in the db:</p> <pre><code>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 ... </code></pre> <p>My question is: how do I add a new field to the asp_net profile without having an exception thrown?</p> <p><strong>EDIT: Web config</strong></p> <pre><code>&lt;profile defaultProvider="AspNetSqlProfileProvider" enabled="true"&gt; &lt;providers&gt; &lt;clear /&gt; &lt;add name="AspNetSqlProfileProvider" type="MyApp.Web.MySqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /&gt; &lt;/providers&gt; &lt;properties&gt; &lt;add name="FriendlyName" /&gt; &lt;add name="JobTitle" /&gt; &lt;add name="TopLevelViewName" defaultValue="[ANY]" /&gt; &lt;add name="TopLevelViewID" type="System.Guid" defaultValue="[null]" /&gt; &lt;add name="RouteIDs" /&gt; &lt;add name="TopLevelViewType" type="System.Int32" defaultValue="0" /&gt; &lt;add name="PasswordQuestionAnswer" /&gt; &lt;add name="Criticality" type="System.Int32" defaultValue="0" /&gt; &lt;!--&gt;add name="DefaultToOK" type="System.Boolean" defaultValue="True" /--&gt; &lt;/properties&gt; &lt;/profile&gt; </code></pre> <p><strong>Web Profile</strong></p> <pre><code>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); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload