Не уверен, как сформулировать: переписать метод из учебника - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь создать пользовательский MembershipUser, и мне нужно переопределить метод GetUser ().

Я следую этому уроку: http://msdn.microsoft.com/en-us/library/ms366730.aspx

Вот что у меня есть:

    public override MembershipUser GetUser(string username, bool userIsOnline)
    {
        CustomMembershipConext db = new CustomMembershipConext();

        var user = db.User.Where(u => u.UserName == username).FirstOrDefault();

        if (userIsOnline)
        {
            user.LastActivityDate = DateTime.Now;

        }

        return user;
        // Error 4 Cannot implicitly convert type 'MvcApplication1.Models.User' to 'System.Web.Security.MembershipUser'

    }
}

Я пытаюсь повторить это:

public override MembershipUser GetUser(string username, bool userIsOnline)
{
   OdbcConnection conn = new OdbcConnection(connectionString);
   OdbcCommand cmd = new OdbcCommand("SELECT PKID, Username, Email, PasswordQuestion," +
        " Comment, IsApproved, IsLockedOut, CreationDate, LastLoginDate," +
        " LastActivityDate, LastPasswordChangedDate, LastLockedOutDate," +
        " IsSubscriber, CustomerID" +
        " FROM Users  WHERE Username = ? AND ApplicationName = ?", conn);

  cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
  cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;

  OdbcMembershipUser u = null;
  OdbcDataReader reader = null;

  try
  {
    conn.Open();

    reader = cmd.ExecuteReader();

    if (reader.HasRows)
    {
      reader.Read();
      u = GetUserFromReader(reader);

      if (userIsOnline)
      {
        OdbcCommand updateCmd = new OdbcCommand("UPDATE Users  " +
                  "SET LastActivityDate = ? " +
                  "WHERE Username = ? AND Applicationname = ?", conn);

        updateCmd.Parameters.Add("@LastActivityDate", OdbcType.DateTime).Value = DateTime.Now;
        updateCmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
        updateCmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;

        updateCmd.ExecuteNonQuery();
      }
    }

  }
  catch (OdbcException e)
  {
    if (WriteExceptionsToEventLog)
    {
      WriteToEventLog(e, "GetUser(String, Boolean)");

      throw new ProviderException(exceptionMessage);
    }
    else
    {
      throw e;
    }
  }
  finally
  {
    if (reader != null) { reader.Close(); }

    conn.Close();
  }

  return u;      
}

1 Ответ

1 голос
/ 13 февраля 2012

пользователь не относится к типу user, он все еще является IQueryable <...>. Вам нужно извлечь свой пользовательский объект из результата запроса:

var user = db.User.Where(u => u.UserName == username).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...