2011-08-13 9 views
12

Necesito crear un DAL y repositorios usando petapoco. La dificultad que entra, es que no sé cómo maneja sus conexiones.cómo crear un DAL usando petapoco

Si estaba usando dapper, sé cómo fluye el proceso de conexión porque lo controlo. No sé cuáles son las mejores prácticas para crear un DAL con petapoco.

public class UserRepository 
    { 
     public IEnumerable<User> All() 
     { 
      var db = new PetaPoco.Database("Sqlite_Connection");//this line 
      var s = db.Query<User>("SELECT * FROM Users"); 
      return s.ToList(); 
     } 
    } 

quisiera colocar var db = new PetaPoco.Database("Sqlite_Connection");//this line en mi clase DALHelper como una propiedad estática, pero estoy preocupado por la escalabilidad

Respuesta

11

No recomiendo usar una estática ya que puede obtener errores como porque la misma conexión es utilizada por diferentes solicitudes accediendo al mismo recurso.

Dos opciones:

1. Crear la conexión en una clase base del controlador

public class BaseController : Controller 
{ 
    protected DatabaseWithMVCMiniProfiler _database; 

    protected override void OnActionExecuting(ActionExecutingContext filterCon) 
    { 
    base.OnActionExecuting(filterCon); 

    _database = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 

    } 
} 

2. Método estático creando una conexión por cada solicitud

public static class DbHelper { 
    public static Database CurrentDb() { 
    if (HttpContext.Current.Items["CurrentDb"] == null) { 
     var retval = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 
     HttpContext.Current.Items["CurrentDb"] = retval; 
     return retval; 
    } 
    return (Database)HttpContext.Current.Items["CurrentDb"]; 
    } 
} 
+1

Gracias Eduardo, me vuelve a confiar con PetaPoco, también encontré este SO con la sugerencia de utilizar 1 instancia de petapoco.database por solicitud: http://stackoverflow.com/questions/7126205/how-can-integrate-mvcminiprofiler-with- petapoco-sin-cambiar-las-fuentes – joeriks

+1

PetaPoco es fabuloso. Lo estoy usando en varios proyectos ahora y funciona muy bien en todo tipo de escenarios. –

3

Una propiedad estática va a estar bien para la inicialización. PetaPoco abrirá y cerrará la conexión cada vez, a menos que esté utilizando una transacción. Esto no suele ser un problema debido a la agrupación de conexiones.

Si está utilizando esto en una aplicación web, debe instanciar una base de datos PetaPoco por solicitud.

+0

lo estoy usando de esta manera en producción para manejar transacciones anidadas entre operaciones DAL y funciona bien. – Larry

+0

Yo (y otros) hemos encontrado que al usar una estática (como en por aplicación) tenemos problemas. Ver mi respuesta –

Cuestiones relacionadas