Entity Framework Core conexión de gestión




 En un proyecto central de asp.net, necesito una base de datos SQLite encriptada. Para eso, hice mi propia `SqliteEncryptedConnection` que hereda de `Microsoft.Data.Sqlite.SqliteConnection` y que establece la clave de cifrado en el método `Open()` (ejecute la clave PRAGMA = ...) 

 Tengo un método de extensión que configura mi contexto EF creando una conexión y proporcionándolo. 


```
    public static void UseEncryptedSqlite(this DbContextOptionsBuilder optionsBuilder, string connectionString, string password)
    {
        var connection = new SqliteEncryptedConnection(connectionString, password);
        connection.Open();
        optionsBuilder.UseSqlite(connection);
    }

```
  Debo abrir la conexión antes de entregarla a EF; de lo contrario, EF la abre y cierra automáticamente para cada consulta, y el método `Open()` ahora es bastante caro. 

 ¡Mi problema con esta solución es que mi conexión nunca se elimina ni se cierra! 

1. ¿Es correcto establecer la clave de cifrado en Abrir?
2. ¿Hay alguna manera de saber cuándo se dispone el contexto? ¿O configurarlo para cerrar y disponer la conexión después de que se elimine?
3. ¿Hay otra (mejor) forma de gestionar la conexión?

 La solución sucia sería disponer la conexión en el método de Disposición del contexto de EF, pero realmente no quiero eliminar una dependencia que fue inyectada y que no es propiedad del contexto.
Recibí una respuesta de Brice Lambson que trabaja en el equipo central de EF: 


>  Vas en la dirección correcta: abre las conexiones menos. Recuerde, las conexiones SQLite son esencialmente secuencias de archivos, por lo que mantenerlas abiertas por más tiempo no es realmente un problema. 
> 
>  **Si solo hay una instancia de DbContext por conexión, DbContext aún puede ser propietario de la conexión, incluso si se crea externamente. Simplemente disponga la conexión dentro de DbContext.Dispose ().** 
> 
>  Si eso no es suficiente, puede intentar crear un grupo de conexiones. La gestión de la vida puede ser difícil. Lo importante es que una conexión no se usa fuera del hilo en el que se creó. 
> 
>  El uso de Cache = Shared (es decir, [Shared-Cache Mode](https://www.sqlite.org/sharedcache.html) ) también puede ayudar al rendimiento. 
> 
>
Básicamente hay varias cosas que puedes hacer. 

* usando `SqlBulkCopy.WriteToServer` que no funciona muy bien junto con EF, sin embargo, existen varios intentos para crear extensiones
* utilizando un procedimiento almacenado que tomará un registro grande y lo dividirá de acuerdo con alguna lógica
* utilizando parámetros de procedimiento almacenado escritos en la tabla y realice una llamada al procedimiento almacenado (y varias `insert ... select` dentro del procedimiento almacenado)

 En general, prefiero la tercera opción. 

 Marque esta pregunta [Entity Framework Stored Procedure Tabla Valor Parámetro](https://stackoverflow.com/questions/8157345/entity-framework-stored-procedure-table-value-parameter) Los ejemplos que otros han dado no funcionarán en Entity Framework hoy, porque no se pueden combinar enumeración de clientes y servidores en las entidades LINQ 2. 

 En su lugar, necesita construir una expresión OR, manualmente. 

 Ejecuto una serie de [consejos](http://blogs.msdn.com/alexj/archive/2009/03/26/index-of-tips.aspx) de [EF](http://blogs.msdn.com/alexj/archive/2009/03/26/index-of-tips.aspx) y [este consejo](http://blogs.msdn.com/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx) te muestra cómo construir una expresión OR. 

 Espero que esto ayude 

 Alex El equipo de EF, junto con P&P, se encuentra actualmente en el proceso de desarrollar una implementación de referencia de acceso a datos de EF (versión 4) que utiliza ASP.NET MVC como la interfaz. 

 El proyecto estará disponible de forma iterativa en CodePlex aquí: 

 <http://dataguidance.codeplex.com/> 

 Aún no hemos hecho nuestra primera fuente, pero ocurrirá en las próximas semanas. 

 ACTUALIZACIÓN: ahora hemos eliminado el código; tenga en cuenta que debe considerarse de calidad alfa y está sujeto a cambios. vea este artículo <http://msdn.microsoft.com/en-us/library/bb738695.aspx> y <http://msdn.microsoft.com/en-us/library/bb386870.aspx> muestra acerca de la actualización con EF.   
 Y esta pregunta SO sobre ApplyCurrentValues: [ApplyCurrentValues en EF 4](https://stackoverflow.com/questions/2272325/applycurrentvalues-in-ef-4) para ver cómo trabajar con AppliCurrentValues. El autor de este artículo está algo equivocado: en .NET 4.5, la propiedad [AsynchronousProcessing](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.asynchronousprocessing.aspx) se ignora porque ya no es necesaria. Puede comenzar a [llamar a los métodos Async](http://msdn.microsoft.com/en-us/library/hh211418.aspx) de SqlClient sin cadenas de conexión especiales. 

 Si las operaciones se ejecutarán de forma asíncrona, depende del proveedor de la base de datos. Por ejemplo, la implementación predeterminada de [DbCommand.ExecuteDbDataReaderAsync en](http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.executedbdatareaderasync.aspx) realidad se ejecuta de forma síncrona y bloquea el hilo de llamada. SqlCommand anula este método y se ejecuta de forma asíncrona. 

 Desafortunadamente, NpgsqlCommand no anula este método, por lo que solo le queda la ejecución síncrona. Si, si que podrás.   
ASP permite la conexión con bases de datos siempre y cuando estas tengan un driver ODBC, que access tiene en el sistema por defecto, así que podrás hacer cnsultas SQL a la base de datos, y si no me equivoco también a los ficheros Excel. Lo que te recomiendo es que te pases por [http://msdn.microsoft.com](https://msdn.microsoft.com/) y busques toda la información allí pues es donde mejor te pueden informar  
En cuanto a saber más de asp tienes   
[http://www.aspin.com](http://www.aspin.com/)  
A la base de datos puedes acceder o bien sabiendo el path o mediante un DSN que puedes asignarle a la base de datos en el sistema. Este ultimo es el método más cómodo.  
Si, puedes probarlo en un ordenador local ya sea windows ME, 9X o 2000, pues todos tienen su servidor web así como el interprete de ASP en el sistema.  
Espero haberte ayudado,  
un saludo. Si tienes problemas con conectar ACCESS con Java, puedes consultar aquí:  
<http://www.dcc.uchile.cl/~cc10a03/catedra/cap21_apu.doc>  
Estos apuntos los hice yo para un curso y yo logré conectar ACCESS con Java puro. Ahora con un applet la cosa no es distinta (de hecho es lo mismo, solo si el APPLET no lo vas a publicar en una página web, que eso es imposible de hacer).  
- Primero que todo ¿configuraste el ODBC de la Base de Datos?  
Si no es así, ve esto: <http://www.dcc.uchile.cl/~cc10a03/catedra/ane04_apu.doc>  
- ¿Te conectas bien con el driver?   
Si lo haces bien y aún tienes dudas de por qué no te funciona, yo tengo un ejemplo más facilito... Tal vez te lo puedo enviar... :-) En octubre va a salir al mercado una cerradura que puedes abrirla mediante una aplicación con tu iPhone vía bluetooth 4.0, la ventaja de esto es que no necesitas sacar el smartphone sino que al estar cerca de la puerta se abre automáticamente y al ingresar se cierra. Te permite utilizar llaves convencionales si lo deseas, otra ventaja que si no estas en tu casa y le quieres enviar la llave a un familiar para que abra se la envían a su teléfono iPhone y podrá abrirla sin problemas. Para más información ingresa en este link: [**http://acomprar.info/kwikset-kevo-permite-abrir-una-puerta-con-tu-iphone-con-solo-tocar-la-cerradura-donde-comprar-amazon-pais/**](http://acomprar.info/kwikset-kevo-permite-abrir-una-puerta-con-tu-iphone-con-solo-tocar-la-cerradura-donde-comprar-amazon-pais/) ![](http://www.hispavista.optize.es/imgproductos/img110000/big/img113937.jpg)  
hola german, completa tu perfil en la pagina por favor...(debes ir a mi cuenta y ahi veras el boton de editar perfil)  
aca te dejo el esquema de como se puede llegar hacer una conexion de tres llaves combinadas  
![](http://img222.imageshack.us/img222/4994/tresnq2.jpg)  
  
te recomiendo que en todos los circuitos que vallas a implementar,siempre el interruptor corta la fase, de esta manera logramos desenergizar el circuito completamente y a la hora de repòner el foco de luz, no corremos riesgo alguno.  
si no logras reconocer entre el color de conductores cual es la fase, cual es el neutro y cual es el sistema de pat (puesta a tierra), delega este trabajo a una persona responsable que se dedique a estos trabajos para que no te lastimas.  
saludos hola [@yshua](/u/yshua) buen día

ya hiciste la configuracion del wf, es en la siguiente ruta?

[imagen]

ahi debes de colocar la estrategia de liberación a la que corresponde el autorizador y su nombre de usuario sap.

[imagen]

también es posible que no este el wf, algunas veces se tiene que hacer manualmente…