Проверить уникальность свойства профиля в ASP.Net (MVC 3)
Я использую свой собственный провайдер профилей в приложении MVC 3 ASP.Net. Я сделал это как в этом блоге, используя класс ProfileBase.
Моя проблема в том, что у меня есть уникальное свойство BlogSpace. Как я могу подтвердить это?
На данный момент я создал статический метод в классе UserProfile, который вызывается в контроллере перед попыткой сохранения. Как это:
public static bool ValidateUniquenessBlogSpace(string blogspace, string currentUsername, MembershipUserCollection col)
{
bool bUnique = true;
foreach (MembershipUser user in col)
{
UserProfile userprofile = Create(user.UserName) as UserProfile;
if (userprofile.BlogSpace == blogspace && userprofile.UserName != currentUsername)
return false;
}
return bUnique;
}
Основная проблема заключается в том, что он проходит через всех участников, поэтому, если моя пользовательская база вырастет, я не уверен, что это будет очень быстро. Другая проблема состоит в том, что, вызывая это из контроллера, я не уверен, как вернуться к представлению, что проблема возникает из этого поля, и показать соответствующее сообщение...(см. Редактирование). Я хотел бы такой подход, но это работает только с базой данных:
public class UniqueBlogSpace : ValidationAttribute
{
public override bool IsValid(object value)
{
DataContext db = new DataContext();
var userWithTheSameBlogSpace = db.Users.SingleOrDefault(
u => u.BlogSpace == (string)value);
return userWithTheSameBlogSpace == null;
}
}
[UniqueBlogSpace(ErrorMessage = "This name is already in use...")]
public string BlogSpace { get; set; }
РЕДАКТИРОВАТЬ
Теперь я знаю, как сообщить моей модели, что в поле возникает проблема с контроллером. Основная проблема по-прежнему заключается в том, что способ разбора всех участников будет очень медленным, если моя пользовательская база будет расти. Есть ли лучший способ проверить уникальность?
ModelState.AddModelError("Blogspace", new System.Exception());