public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection)
{
Condition.Requires(context, "context").IsNotNull();
Condition.Requires(collection, "collection").IsNotNull();
var userName = context[UserNameKey] as string;
if (string.IsNullOrWhiteSpace(userName))
{
return;
}
this.EnsureSupportedColumns();
var ignoreValues =
collection.Cast<SettingsPropertyValue>()
.Where(value => !this.databaseColumns.Contains(value.Name))
.Where(
value =>
string.Compare(
value.Name,
this.membershipProvider.UserEmailColumn,
StringComparison.OrdinalIgnoreCase) != 0
&& string.Compare(
value.Name, this.membershipProvider.UserIdColumn, StringComparison.OrdinalIgnoreCase)
!= 0)
.ToList();
if (ignoreValues.Count > 0)
{
throw new NotSupportedException("invalid profile property, no matching database column defined.");
}
if (this.databaseColumns.Count == 0)
{
return;
}
var updateValues =
collection.Cast<SettingsPropertyValue>()
.Where(value => this.databaseColumns.Contains(value.Name))
.ToList();
if (updateValues.Count == 0)
{
return;
}
using (var db = this.ConnectToDatabase())
{
object[] values;
db.Execute(this.sqlQueryBuilder.UpdateUserProfile(updateValues, userName, out values), values);
}
}