ASP.NET MVC 5- Connectar a una base de dades que ja tenim creada utilitzant Entity Framework 6 ( Database First ) i autenticació d'usuaris

En el cas que volguem connectar el nostre projecte web ASP.NET MVC 5 a una base de dades que ja tenim creada en SQL Server haurem de seguir els següents passos:

1. Creem un projecte nou

Archivo > Nuevo > Proyecto


A la següent pantalla triem Web > Aplicación web ASP.NET ( .NET Framework ) Visual C#



Després triem l'oció MVC, i en el nostre cas cliquem sobre Cambiar autenticación ja que volem portar un control d'accés d'usuaris. Per això seleccionarem l'opció Cuentas de usuario individuales


Al triar l'opció d'identificació per mitjà de Cuentas de usuario individuales es creen a la carpeta Models tres classes:  AccountViewModels.cs, IdentityModels.cs i ManageViewModels.cs per poder dur a terme tota la gestió d'usuaris.




A la carpeta Controllers es crea la classe AccountController.cs i ManageController.cs


Tenir present que també ens crearà un DbContext que trobarem dins la classe IdentityModels.cs que ens ha creat en la carpeta Models. El contingut d'aquesta classe d'acord amb el nostre exemple és:

namespace WebApplicationRRHH.Models
{
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit https://go.microsoft.com/fwlink/?LinkID=317594 to learn more.

public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Tenga en cuenta que el valor de authenticationType debe coincidir con el definido en CookieAuthenticationOptions.AuthenticationType

var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

// Agregar aquí notificaciones personalizadas de usuario
return userIdentity;
}
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{

public ApplicationDbContext()
// Aquí hi va el nom del connection string, en el nostre cas "ConnectionDatabaseRRHH"
: base("ConnectionDatabaseRRHH", throwIfV1Schema: false)
{
}
// Aquí hi van els DbSet que representen les taules de la nostra base de dades.

public virtual DbSet<Convenis> Convenis { get; set; }
public virtual DbSet<DadesEconomiquesTreb> DadesEconomiquesTreb { get; set; }
public virtual DbSet<JornadesLaboralsTreb> JornadesLaboralsTreb { get; set; }
public virtual DbSet<NominesImp> NominesImp { get; set; }
public virtual DbSet<Treballadors> Treballadors { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Convenis>()

.Property(e => e.NomConveni)
.IsUnicode(false);
}

public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
}
2. Connectem a la base de dades existent utilitzant els assistents de Visual Studio ( nou element de dades ADO.NET Entity Data Model CodeFirst)

Això el que fa és:
  • Crear el connectionString al web.config
  • Crear les classes que representen les taules de la base de dades a la que connectem
  • Crear un DbContext. NOTA MOLT IMPORTANT!!!: com que treballem amb autenticació d'usuaris hem de tenir present que ja tindrem un DbContext creat i que no podem tenir-ne dos. Per tant, el contingut del DbContext que ens crea el nou element de dades ADO.NET Entity Data Model CodeFirst desde base de datos  l'haurem de traslladar a la classe public class ApplicationDbContext : IdentityDbContext<ApplicationUser> que es crea dins de IdentityModels.cs que es troba en la carpeta Models i que podem veure més amunt. Un cop traslladat l'eliminem.

Abans de fer res, si anem al Web.config viem que al crear el projecte amb l'opció d'autenticació d'usuaris ens ha creat un connectionString que apunta a una base de dades LocalDb. Això ho ha fet per defecte ja que hem optat per l'opció d'identificació d'usuaris. Com que volem connectar-nos a una base de dades SQL Server que ja tenim creada, el que hem de fer és eliminar aquest connectionString.



Per afegir el nostre connectionString el que fem és Botó de la dreta sobre el nom del projecte > Agregar > Nuevo elemento



En la següent pantalla anem a Datos > ADO.NET Entity Data Model Visual Basic C# , posem el nom de ApplicationDbContext i premem Agregar 



En la següent pantalla premem sobre Code First desde base de datos. Aquesta opció el que fa és preparar-nos el codi de Code First desde una base de dades ja existent. 


Li diem Siguiente i agreguem una nova connexió



A continuació li diem quin és el Nom del servidor SQL Server, el Tipus d'autenticació, en el nostre cas serà Autenticación de SQL Server, el Nom d'usuari i la Contrasenya, premem Guardar contrasenya i si la connexió és correcte, quan despleguem Seleccionar o escribir el nombre de la base de datos ens apareixeran totes les bases de dades  de la instància SQL Server a que hi tenim accés amb les dades informades.



En la següent pantalla, a la pregunta Desea incluir estos datos en la cadena de conexión ? respondrem No, excluir datos confidenciales de la cadena de conexión. Los estableceré en el código de mi aplicación o Sí, incluir datos confidenciales en la cadena de conexión, en funció de l'opció que ens interessi. Per últim marcarem l'opció Guardar configuración de conexión en Web.Config como: ApplicationDbContext i premerem Siguiente.



Seguidament ens surt la pantalla on podem seleccionar les Taules de la base de dades que volem que ens incorpori al model del projecte, que vol dir que ens crearà totes les classes necessàries per treballar amb elles. També podem incorporar Vistes



A continuació premem Finalizar veurem que s'ha creat la classe ApplicationDbContext.cs que és la que ens permet treballar amb les taules de la nostra base de dades. 

NOTA MOLT IMPORTANT:  el contingut d'aquest DbContext el traslladem a la classe on tenim el DbContext que se'ns ha creat al crear el projecte amb l'opció d'autenticació d'usuaris i que com ja hem dit es troba a IdentityModels.cs. Després eliminen la classe perquè no hi hagi dos DbContext.







També ens ha creat les classes que representen les taules que hem seleccionat de la nostra base de dades SQL Server. En el nostre cas Cursos.cs, CursosPerVoluntari.cs, possCollvoluntari.cs, possibibilitatsCollaboracio.cs, UsuarisVoluntariat.cs, voluntaris.cs i Voluntarisxpuntservei.cs. 


També podem observar que s'ha afegit el nostre connectionString al Web.Config



El connectionString resultant és:

<connectionStrings>
    <add name="ApplicationDbContext" connectionString="data source=(Aquí hi va el nom de la connexió a la instancia del servidor SQL Server);initial catalog=bdvoluntariat;persist security info=True;user id=sa;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>


3. Activar les migracions 

Les migracions ens permeten acutalitzar el disseny de la nostra base de dades des de Visual Studio.

Per activar les migracions anem a Herramientas > Administrador de paquetes NugGet > Consola de Administrador de paquetes



A la part inferior ens apareixerà la pestanya Consola de Administrador de paquetes . On posa PM> escribim enable-migrations. En el cas d'obtenir un missatge como aquest "enable-migration : The term 'enable-migration' is not recognized as the name of a cmdlet, function, script file, or operable program". Executem el següent comandament apuntant a la capa o projecte on estiguem treballant amb EF ( EntityFramework ): 

Install-Package EntityFramework -IncludePrerelease



Això el que fa és preparar tot el projecte perquè puguem actualitzar la nostra base de dades a partir del les classes que representen DbSet's. 



Com que hem connectat a una base de dades existent, i volem treballar amb migracions, llavors hem d'actualitzar la nostra migració actual dient-li a EF que ignori els canvis previs, i que a partir del que es faci ara serà fent servir les migracions. En cas contrari EF intentarà migrar totes les classes que tinguem en el nostre projecte. A la Consola del Administrador de pagquetes escribim:

PM> Add-Migration InitialMigration –IgnoreChanges
( Això és molt important fer-ho la primera vegada abans de fer l'update-database, sinó ASP donarà errors al executar l'aplicatiu Web )

Per utilitzar les migracions hem d'escriure en la Consola de Administracion de paquetes el següent:

PM>update-database

Això el que fa és actualitzar la base de dades d'acord amb els canvis fets les classes que representen DbSet's.

Ara ja estem preparats per treballar amb la nostra base de dades dins d'un projecte ASP.NET MVC 5 amb Entity Framework 6.

Per completar la informació de l'artícle pots veure el vídeo Ejemplo Database First, Entity Framework 6, Programando en ASP.NET MVC 5

Comentaris

Entrades populars