SimpleMembershipProvider в веб-сайте с профилем

Я создал новый веб-сайт в VS2012 - НЕ проект - добавил строку подключения, создал таблицы, а затем с помощью ASPNET CONFIGURATION создал пару ролей и пользователь, который, в свою очередь, автоматически создал соответствующие таблицы в моей базе данных: Users, UsersInRoles, Роли, членство и роли. Довольно много работает, как и ожидалось. В версии 4.5 (SimpleMembershipProvider) он не создает все хранимые процедуры, и для старого MemberShipProvider используется дополнительный код.

Я хотел добавить несколько полей в провайдере профиля, как я использую для MembershipProvider:

 <properties>
    <add name="myWhatEver" type="System.Int32" allowAnonymous="false"/>
  </properties>

Но когда я пытаюсь вызвать код, он говорит, что "Профиль" не существует. Поэтому я ищу в Интернете и читаю, что с VS2012, если вы создаете сайт, а не проект, он не поставляется с профилем по умолчанию, поэтому вам нужно создать собственный.

После этого я добавил следующий код в AppCode CS:

namespace myNameSpace {

public class UserProfile : ProfileBase
{
    public static UserProfile GetUserProfile(string username)
    {
        return Create(username) as UserProfile;
    }
    public static UserProfile GetUserProfile()
    {
        return Create(Membership.GetUser().UserName) as UserProfile;
    }

    [SettingsAllowAnonymous(false)]
    public string myWhatEver1
    {
        get { return base["myWhatEver1"] as string; }
        set { base["myWhatEver1"] = value; }
    }
}

В WebConfig:

<profile defaultProvider="MYProfileProvider" inherits="myNameSpace.UserProfile">
  <providers>
    <clear />
    <add name="MYProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MYDBConn"/>
  </providers>
</profile>
<membership defaultProvider="MYMembershipProvider">
  <providers>
    <clear />
    <add name="MYMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="MYDBConn"  applicationName="/"/>
  </providers>
</membership>
<roleManager defaultProvider="MYRoleProvider">
  <providers>
    <clear />
    <add name="MYRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="MYDBConn" applicationName="/"/>
  </providers>
</roleManager>

Я захожу на страницу позади, и он распознает мой пользовательский профиль! Я все взволнован, пока я не запустил страницу и не получил это:

Не удалось найти хранимую процедуру 'dbo.aspnet_CheckSchemaVersion'.

Что теперь? Я уверен, что SimpleMembershiProvider не использует хранимые процедуры, такие как MembershipProvider, и я действительно не хочу устанавливать MembershipProvider в базе данных. Должно быть что-то, что я могу добавить в свой код, чтобы он работал как есть.

Какие-либо предложения??

Благодарю.

1 ответ

Решение

Ваш web.config настроен на использование поставщиков по умолчанию вместо поставщиков SimpleMembership. Ваш web.config должен выглядеть так, чтобы использовать SimpleMembership.

   <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>

Поставщики SimpleMembership не будут пытаться вызвать хранимые процедуры, используемые поставщиками по умолчанию.

Также нельзя использовать конфигурацию ASP.NET для создания пользователей и ролей при использовании SimpleMembership. Вы должны создать собственное приложение для этого или заполнить базу данных при ее создании, как описано в этой статье. Эта статья и большинство других статей в Интернете направлены на использование SimpleMembership с MVC, а не веб-форм. Но, как указывает этот контроль качества, он должен работать с веб-формами.

Другие вопросы по тегам