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, а не веб-форм. Но, как указывает этот контроль качества, он должен работать с веб-формами.