Implementando Provedor de Perfil no ASP.NET MVC

Para a vida de mim, não consigo obter o SqlProfileProvider para trabalhar em um projeto MVC que estou trabalhando.

A primeira coisa interessante que percebi é que o Visual Studio não gera automaticamente a class de proxy ProfileCommon para você. Isso não é grande coisa, já que é uma questão de extender a class ProfileBase. Depois de criar uma class ProfileCommon, escrevi o seguinte método Action para criar o perfil do usuário.

[AcceptVerbs("POST")] public ActionResult CreateProfile(string company, string phone, string fax, string city, string state, string zip) { MembershipUser user = Membership.GetUser(); ProfileCommon profile = ProfileCommon.Create(user.UserName, user.IsApproved) as ProfileCommon; profile.Company = company; profile.Phone = phone; profile.Fax = fax; profile.City = city; profile.State = state; profile.Zip = zip; profile.Save(); return RedirectToAction("Index", "Account"); } 

O problema que estou tendo é que a chamada para ProfileCommon.Create () não pode converter para digitar ProfileCommon, então eu não sou capaz de recuperar meu object de perfil, o que obviamente faz com que a próxima linha falhe, já que o perfil é nulo.

A seguir está um trecho do meu web.config:

                  

O MembershipProvider está funcionando sem problemas, então sei que a string de conexão é boa.

Apenas no caso de ser útil, aqui está minha class ProfileCommon:

 public class ProfileCommon : ProfileBase { public virtual string Company { get { return ((string)(this.GetPropertyValue("Company"))); } set { this.SetPropertyValue("Company", value); } } public virtual string Phone { get { return ((string)(this.GetPropertyValue("Phone"))); } set { this.SetPropertyValue("Phone", value); } } public virtual string Fax { get { return ((string)(this.GetPropertyValue("Fax"))); } set { this.SetPropertyValue("Fax", value); } } public virtual string City { get { return ((string)(this.GetPropertyValue("City"))); } set { this.SetPropertyValue("City", value); } } public virtual string State { get { return ((string)(this.GetPropertyValue("State"))); } set { this.SetPropertyValue("State", value); } } public virtual string Zip { get { return ((string)(this.GetPropertyValue("Zip"))); } set { this.SetPropertyValue("Zip", value); } } public virtual ProfileCommon GetProfile(string username) { return ((ProfileCommon)(ProfileBase.Create(username))); } } 

Qualquer pensamento sobre o que eu posso estar fazendo errado? Algum do resto de vocês integrou com sucesso um ProfileProvider com seus projetos ASP.NET MVC?

Agradeço antecipadamente…

Veja o que você precisa fazer:

1) Na seção Web.config, adicione o atributo “inherits” além de suas outras configurações de atributo:

 
		      	

Não tenho certeza sobre a questão toda, mas uma coisa que notei no seu código:

 ProfileCommon profile = (ProfileCommon)ProfileCommon.Create(user.UserName, user.IsApproved) as ProfileCommon; 

Você não precisa tanto do (ProfileCommon) como do ProfileCommon. Ambos fazem lançamentos, mas o () lança e exceção enquanto o como retorna um nulo se o lançamento não puder ser feito.

Experimente o Construtor de Perfis da Web . É um script de construção que gera automaticamente uma class WebProfile (equivalente a ProfileCommon) a partir do web.config.

O arquivo web.config no MVC Beta está errado. O SqlProfileProvider está no System.Web.Profile, não no System.Web.Security. Altere isso e ele deve começar a funcionar para você.