¿Hay alguna manera de eliminar la dependencia predeterminada de Entity Framework dentro de MVC 4?

asp.net-mvc-4 dapper entity-framework

Pregunta

¿Hay alguna manera de eliminar la dependencia predeterminada de Entity Framework dentro de un proyecto ASP.NET MVC 4 y reemplazarla con otra tecnología similar como Dapper?

Respuesta aceptada

Si crea una nueva aplicación web ASP.NET MVC 4 y selecciona "Aplicación de Internet" como la plantilla del proyecto, notará que se hace referencia a Entity Framework y se utiliza como parte de SimpleMembership. Sin embargo, solo existe una dependencia muy pequeña en Entity Framework y probablemente no valga la pena eliminarlo.

Entity Framework parece usarse solo para 2 tareas menores

La primera forma en que se utiliza Entity Framework es crear el esquema de base de datos necesario para almacenar los datos de membresía. La creación del esquema de la base de datos no es algo que Dapper hará por usted y, si elimina Entity Framework, tendrá que administrar manualmente los cambios en sus modelos de membresía / base de datos.

La segunda forma en que se utiliza Entity Framework es dentro de un único método llamado "ExternalLoginConfirmation" dentro del "AccountController" predeterminado como parte de la integración de OAuth. Se usa para registrar usuarios nuevos que se han autenticado desde un proveedor externo (como Facebook).

Podemos decir entonces que SimpleMembership usa comandos SQL y no Entity Framework [1].

Debido a que SimpleMembership usa comandos SQL y no Entity Framework, debe ser tan rápido como una solución Dapper comparable para esta tarea. Además, esta configuración de SimpleMembership ha sido probada extensamente por Microsoft y la comunidad. Por esas razones, lo dejaría en paz. El código que se ocupa de la seguridad debería dejarse en manos de expertos de seguridad acreditados [2].

Cómo eliminar Entity Framework de una nueva aplicación web ASP.NET MVC 4

Si realmente lo desea, la dependencia es muy fácil de eliminar (supongo que su base de datos de miembros ya está creada y en funcionamiento).

=====> Paso 1

En Visual Studio Solution Explorer abra la carpeta "Referencias".

Haga clic derecho en "EntityFramework" y seleccione "Eliminar".

=====> Paso 2

Abrir filtros / InitializeSimpleMembershipAttribute.cs

Eliminar lo siguiente:

using System.Data.Entity.Infrastructure;

y

Database.SetInitializer<UsersContext>( null );

y

using ( var context = new UsersContext() ) {
    if ( !context.Database.Exists() ) {
        // Create the SimpleMembership database without Entity Framework migration schema
        ( ( IObjectContextAdapter ) context ).ObjectContext.CreateDatabase();
    }
}

=====> Paso 3

Abierto: Modelos / Modelos de cuenta.cs

Eliminar lo siguiente:

public class UsersContext : DbContext {
    public UsersContext()
        : base( "DefaultConnection" ) {
    }

    public DbSet<UserProfile> UserProfiles {
        get;
        set;
    }
}

=====> Paso 4

Abierto: Controladores / AccountController.cs

Busque el método llamado "ExternalLoginConfirmation".

Reemplace lo siguiente:

using ( UsersContext db = new UsersContext() ) {
    UserProfile user = db.UserProfiles.FirstOrDefault( u => u.UserName.ToLower() == model.UserName.ToLower() );
    // Check if user already exists
    if ( user == null ) {
        // Insert name into the profile table
        db.UserProfiles.Add( new UserProfile {
            UserName = model.UserName
        } );
        db.SaveChanges();

Con su código equivalente de dapper, los comentarios del código le dicen qué debe implementarse.

Debería poder eliminar este y otros métodos si no está usando OAuth.

Et Voila;)

[1] "Todo se implementa como llamadas SQL en lugar de requerir procedimientos almacenados, vistas, agentes y notificaciones de cambios".
Jon Galloway, Microsoft

[2] "Permítanme que les dé toda mi precaución estándar acerca de rodar sus propios algoritmos criptográficos y sistemas de seguridad: no. Es muy, muy fácil crear sistemas de seguridad que son casi, pero no del todo seguros. Un sistema de seguridad que le brinda ¡una falsa sensación de seguridad es peor que ningún sistema de seguridad! "
Eric Lippert, leyenda



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué