Tentando seguir uma corrente coerente, vamos pegar no último artigo de ASP.NET e dar um uso prático ao que foi exposto.
Pré-Requisito: Web Application criada com a DB correspondente configurada; Login e CreateUserWizard Controls adicionados. A DB chama-se "Tuganologia".
Vamos usar LINQtoSQL, portanto vamos começar por criar as suas respectivas classes:
- Add new Item --> LINQtoSQL Classes , nome “TuganologiaLINQtoSQL.dbml” --> Add
De seguida ir ao Database Explorar e arrastar todas as tables (custom e aspnet membership) para o .dbml ; com isto é criado o Data Context do TuganologiaLINQtoSQL.
O que se pretende com este post é fazer a bridge entre as tabelas aspnet e as custom. Na nossa DB “Tuganologia”, criei uma tabela denominada “User”, e é precisamente nessa tabela que vai ocorrer a bridge.
Qual o control onde tal deverá acontecer? No CreateUserWizard obviamente.
Temos um CreateUserWizard de ID=”CreateUserWizard1” e o que nos interessa é alterar o evento “CreatedUser” (ocorre imediatamente após ter sido atribuído um GUID para o userID do user recém registado). Vamos então alterar esse evento. Duplo click no “CreatedUser” event e vamos parar ao code behind:
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
}
Antes de alterar o evento, há algo a fazer primeiro: Resolvi criar uma classe denominada de “TuganologiaDataLayer.cs” que pode vir a conter todas as funções de modulação da nossa DB. Vamos adicionar a seguinte função:
public class TuganologiaDataLayer
{
TuganologiaLINQtoSQLDataContext database = new TuganologiaLINQtoSQLDataContext();
public void CreateUser(Guid userId, string email)
{
User userDetails = new User();
userDetails.userID = userId;
userDetails.firstName = "";
userDetails.lastName = "";
userDetails.email = email;
database.Users.InsertOnSubmit(userDetails);
database.SubmitChanges();
}
}
Como podem observar criámos uma nova instância do nosso Data Context e na função tratámos o User como um objecto (LINQ traz-nos ORM, Object Relational Mapping, à Framework .NET, o que nos permite manipular a DB como "pure objects"). O resto já vão perceber quando finalmente alterarmos o evento “CreatedUser”:
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
MembershipUser newUser = Membership.GetUser(((CreateUserWizard)sender).UserName);
Guid newUserId = (Guid)newUser.ProviderUserKey;
// aqui é que fazemos a bridge!
TuganologiaDataLayer dataLayer = new TuganologiaDataLayer();
dataLayer.CreateUser(newUserId, ((CreateUserWizard)sender).Email);
}
Este evento vai executar o GetUser do controlo “CreateUserWizard” (User que acabou de se registar no nosso site); após isso criamos o nosso Guid “newUserId” , que vai corresponder à Guid atribuída a esse user aquando do seu registo ((Guid)newUser.ProviderUserKey).
Resta-nos instanciar a nossa Data Layer e chamar a nossa função “CreateUser”.
A nossa custom table “User” tem agora o userID (Guid) e o Email inserido no CreateUserWizard. =)
Qualquer dúvida contactar via: tuganologia@gmail.com
TR