我的应用程序已经存在了一段时间,因此数据库中有很多用户并且他们已经附加了配置文件数据,我现在需要在配置文件中添加一个额外的字段。
我将新字段添加到我的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);
}
}
答案 0 :(得分:0)
如果您以编程方式加载配置文件,请修改下面的代码以设置您的值,我相信它应该可以解决问题:
var profile = ProfileBase.Create(username);
profile.SetPropertyValue("MyGuid", aGuid);
profile.SetPropertyValue("MyString", aString);
// etc
profile.Save()