Хранение дополнительных данных в таблице aspnet_profile с данными о членстве - PullRequest
6 голосов
/ 21 октября 2011

Я использую членство API с реализацией OpenId в моем проекте, построенном на платформе MVC2. Кроме имени пользователя, мне нужно, чтобы некоторые другие поля были связаны с пользователем во время регистрации.

Хотя я не уверен, но я думаю, что система профилей в asp.net создана для этого типа требований. Кроме того, я вижу таблицу с другими таблицами членства под названием «aspnet_profile».

Я добавил следующие параметры в приложение web.config для включения профиля:

<profile enabled="true">
      <properties>
        <add  name="FullName" allowAnonymous="false"/>

      </properties>

    </profile>

Как уже говорилось ранее, приложению необходимо связать некоторые дополнительные данные с пользователем, поэтому при создании пользователя с использованием API членства я добавил еще несколько строк кода для ввода в таблицу профиля

System.Web.Security.MembershipCreateStatus status = MembershipService.CreateUser(userModel.UserName, userModel.Password, userModel.UserName);

                   if (status == System.Web.Security.MembershipCreateStatus.Success)
                   {
                       FormsService.SignIn(userModel.UserName, true);
                       Session["Username"] = userModel.UserName;

                       dynamic profile = ProfileBase.Create(MembershipService.GetUser(userModel.UserName).UserName);
                       profile.FullName = userModel.UserFullName;
                       profile.Save();

                       RedirectToAction("Tech", "Home");



                   }

Но я не вижу ни одной строки, добавленной в таблицу aspnet_profile в базе данных. Кроме того, я хотел спросить, является ли это предпочтительным способом добавления дополнительных данных вместе с данными о членстве по умолчанию

Ответы [ 3 ]

4 голосов
/ 21 октября 2011

Я сделал это, внеся некоторые изменения, связанные с именем поставщика профиля по умолчанию в web.config:

<profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" applicationName="/" connectionStringName="ApplicationServices" type="System.Web.Profile.SqlProfileProvider" />
      </providers>

      <properties>
        <add  name="FullName" allowAnonymous="false"/>

      </properties>

    </profile>

Также я добавил еще одну строку между вызовом функции ProfileBase.Create и настройкой профиля.FullName;

profile.Initialize(userModel.userName, true);

Я наконец-то увидел запись в таблице aspnet_profile для вновь зарегистрированного пользователя:)

1 голос
/ 21 октября 2011

При использовании поставщика профилей ASP.NET свойства профиля - это способ настройки профиля пользователя. Однако вам не нужно создавать и сохранять экземпляр профиля самостоятельно - это выполняется самой средой выполнения ASp.NET. Используйте либо HttpContext.Current.Profile , либо используйте строго типизированное динамическое свойство Profile со своей страницы. Используя позже, вы можете написать код, такой как

Profile.UserName = "User Name"; 

Нет необходимости вызывать Save метод. Для получения дополнительной информации см. эту статью .

В веб-приложении нельзя реально ссылаться на динамически создаваемый класс Profile, поэтому вам придется работать с HttpContext.Current.Profile (вы, конечно, можете назначить его переменной dynamic для более удобочитаемого кода, как вы сделали). Другой способ - написать свой собственный класс .

1 голос
/ 21 октября 2011

1, вам нужно создать класс профиля, чтобы определить структуру профиля

2, вам нужно настроить параметры своего профиля в web.config как

3, теперь вы можете использовать свой код сейчас.

Вам просто нужно сделать первые 2 шага, прежде чем использовать его.

ref: http://weblogs.asp.net/jgalloway/archive/2008/01/19/writing-a-custom-asp-net-profile-class.aspx

...