Реализовать пользовательский ValidateUser в MembershipProvider

Я реализую собственный MembershipProvider и пытаюсь получить метод ValidateUser для проверки моей таблицы Profiles в SQL Server. В этой таблице есть столбцы с именами UserName и Password.

public override bool ValidateUser(string username, string password)
{
    ??? what to do here???
}

К вашему сведению, сначала я использую код MVC3 и EF 4.1.

Спасибо

Павел


person Paul Brown    schedule 25.03.2011    source источник


Ответы (1)


Если вы используете EF 4.1, у вас будет какой-то объект DbContext, содержащий DbSet для вашей таблицы Profiles, верно?

Итак, в этом случае используйте это:

public override bool ValidateUser(string username, string password)
{
    using(DbContext yourCtx = new DbContext())
    {
        // from your "Profiles" DbSet, retrieve that single entry which
        // matches the username/password being passed in

        var profile = (from p in yourCtx.Profiles
                      where p.UserName == username && p.Password == password
                      select p).SingleOrDefault();

        // if that query returns a "Profile" (is != null), then your
        // username/password combo is valid - otherwise, it's not valid
        return (profile != null);
    }
}
person marc_s    schedule 25.03.2011
comment
отлично :) однако VS не нравится строка: использование (DbContext yourCtx = new DbContext()) ... говорит, что «System.Data.Entity.DbContext.DbContext()» недоступно из-за его уровня защиты. Спасибо, Пол. - person Paul Brown; 25.03.2011
comment
@Paul Brown: вам нужно заменить DbContext вашим конкретным контекстом базы данных (я не знаю, как это называется - это должен быть класс, производный от DbContext) - person marc_s; 25.03.2011
comment
@ marc_s - Отлично, разобрался. Теперь последнее... var profile дает какие-либо идеи. Не удается назначить группу методов неявно типизированной локальной переменной? Большое спасибо за Вашу помощь! - person Paul Brown; 25.03.2011
comment
@Paul Brown: о, извините, мой плохой, .SingleOrDefault() - это метод, поэтому в конце нужна пара парных скобок ... - person marc_s; 25.03.2011