Я использую ASP.NET MVC4, я установки пользовательский класс профилей, как описано в этом article about universal membership providersASP.NET Membership: Настраиваемый профиль Наследование
public class CustomProfile : ProfileBase
{
public DateTime? Birthdate
{
get { return this["Birthdate"] as DateTime?; }
set { this["Birthdate"] = value; }
}
public static CustomProfile GetUserProfile(string username)
{
return Create(username) as CustomProfile;
}
public static CustomProfile GetUserProfile()
{
var user = Membership.GetUser();
if (user == null)
return null;
return Create(user.UserName) as CustomProfile;
}
}
Я также обновил запись для профиля определение на web.config:
<profile defaultProvider="DefaultProfileProvider" inherits="MembershipTestsV3.Models.CustomProfile">
<providers>
<add name="DefaultProfileProvider"
type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"
applicationName="MyAppName" />
</providers>
</profile>
Это означает, что я могу создать экземпляр моего пользовательского объекта профиля, как это всякий раз, когда я хочу:
var customProfile = HttpContext.Profile as CustomProfile;
Теперь я хочу иметь много типов профилей, которые наследуются от этой базы; Такие, как AdminUserProfile или SupervisorProfile:
public class SupervisorProfile : CustomProfile
{
public string Department
{
get { return this["Department"] as string; }
set { this["Department"] = value; }
}
}
Но, каждый раз, когда я пытаюсь бросить объект я получаю нулевое ссылочное исключение:
var customProfile = HttpContext.Profile as SupervisorProfile;
Я знаю, что на уровне базы данных профиль будет просто сохранить все связанные столбцы в одной таблице, я просто хочу, чтобы свойства были организованы на уровне сервиса. Есть ли способ достичь этого?
Вся схема членства кажется «выключено». С одной стороны, есть универсальные провайдеры, которые в значительной степени реализованы, но свойства - это сложность для расширения (поскольку они хранятся как капли на одной таблице с общей структурой), а с другой стороны есть SimpleMembership, которая позволяет CodeFirst для таблицы профилей, но несовместим со многими готовыми средствами администрирования, такими как SecurityGuard. – amhed