У меня есть часть моего веб-приложения mvc 3, где мне нужно разрешить пользователям (в данном случае администраторам) управлять пользователями.Администратор сможет редактировать информацию о профиле пользователя, а также некоторые свойства членства .NET, такие как UserName, Email, IsLockedOut.Часть, с которой я борюсь, состоит в том, как лучше всего обернуть все это в пользовательскую модель.
В настоящее время у меня есть объект Profile, подобный так:
public class Profile
{
public int ProfileID { get; set; }
public Guid UserID { get; set; } // link to membership user ID
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
}
Моей первой мыслью было сделать что-то вроде этого:
public class ProfileUser
{
public ProfileUser(Profile profile)
{
Profile = profile;
User = Membership.GetUser(profile.UserID);
}
public Profile Profile { get; set; }
public MembershipUser User { get; set; }
}
Но так как некоторые поля читаютсятолько в классе MembershipUser я не смог бы напрямую передать модель обратно в контроллер с новыми значениями для поля UserName или IsLockedOut для обновления базы данных.
Тогда я подумал о том, чтобы просто сделать обертку для обоих классов как один класс:
public class ProfileUser : Profile
{
public ProfileUser(Profile profile)
{
this.ProfileID = profile.ProfileID;
this.UserID = profile.UserID;
this.FirstName = profile.FirstName;
this.LastName = profile.LastName;
this.Phone = profile.Phone;
}
private string userName;
public string UserName
{
get
{
if (userName == null)
{
userName = Membership.GetUser(this.UserID).UserName;
}
return userName;
}
set
{
userName = value;
}
}
private string email;
public string Email
{
get
{
if (email == null)
{
email = Membership.GetUser(this.UserID).Email;
}
return email;
}
set
{
email = value;
}
}
private bool? isLockedOut;
public bool? IsLockedOut
{
get
{
if (isLockedOut == null)
{
isLockedOut = Membership.GetUser(this.UserID).IsLockedOut;
}
return isLockedOut;
}
set
{
isLockedOut = value;
}
}
}
Если я сделаю это таким образом, я смогу передать значения, когда администратор ввел их обратно вмодели и делаю все возможное, чтобы обновить эти поля только для чтения в БД, но я не уверен, что я реализую этот класс наилучшим образом.
Отказ от ответственности : Я понимаю, что лучший путь - это, вероятно, сделать пользовательское членство или поставщика профиля, но по причинам, не зависящим от меня, я не могу пойти по этому пути.Во всех этих примерах я буду извлекать объект профиля из БД, к которой уже будет привязан идентификатор пользователя из их записи о членстве.
Будем весьма благодарны за любые указания по этому вопросу.Заранее спасибо, что нашли время помочь.