c# - studio - System.Data.SQLite 1.0.91.0 y EF6.0.2
sqlite visual studio 2008 (14)
¿Alguien ha obtenido el nuevo System.Data.SQLite 1.0.91.0 para trabajar con Entity Framework 6 en Visual Studio 201 #? Si lo has hecho, ¿cómo lo hiciste?
Actualización - 20 de marzo de 2014: System.Data.SQLite 1.0.92.0 fue lanzado pero no tuve suerte creando un EDMX en VS2013 :( terminé usando el Administrador de paquetes (porque EF6. #. # Es una dependencia en el nuevo SQLite) Paquete NuGet):
uninstall-package entityframework -force
reinicie VS2013 y ponga el EF5 anterior para que VS2013 genere un EDMX desde una base de datos existente:
install-package entityframework -version 5.0.0
Nota: Esta no fue una prueba de base de datos relacional SQLite compleja, de varias tablas, así que no estoy seguro de qué otros problemas surgirán si utilizo algo con más de un par de relaciones de navegación (FK): /
RESPUESTA para EDMX / Model First: (Actualización: 2 de marzo de 2014) Encontré una solución alternativa, pero no es lo suficientemente constante y requiere demasiados pasos para considerarla una solución válida. Básicamente:
usted hace todos los archivos de clase (s),
hacer una conexión a una base de datos SQLite existente con tablas,
modifique el web / app.config a según lo descrito por mistachkin en el Ticket SQLite Trouble Ticket aún pendiente ( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 ), incluyendo la falsificación del cdsl / .ssdl /.msl piezas, y
luego, cree manualmente todos los Modelos de Entidad en el Diseñador en un EDMX Vacío antes de reconstruir el proyecto y luego ...
haga clic con el botón derecho en una entidad y elija ''Actualizar desde la base de datos'' ...
En ocasiones, EF / VS2013 agregará .tt / DbContesxt y, a veces, no. Demasiado "acertar o perder" :(
RESPUESTA para "Code First" con y sin una base de datos SQLite existente (basada en las sugerencias de PMCB, Drexter y Jimi). Sin embargo, tenga en cuenta que no puede generar ningún modelo EF o archivos EDMX [sic - Idioma de definición de esquema conceptual (.CSDL), Idioma de definición de esquema de almacenamiento (.SSDL) e Idioma de especificación de asignación (.MSL)] automáticamente en Visual Studio 2013. Lo hice No intente crear manualmente los archivos EDMX para ver si serían aceptables para EF e incluso si lo hiciera, me parece que hacer todas las creaciones / mapeos / cambios / ediciones manuales de forma manual derrota todo el propósito / concepto de un marco basado en entidades ...
<connectionStrings>
<add name="DogsContext" connectionString="Data Source=|DataDirectory|/dogs.s3db;" providerName="System.Data.SQLite" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
Aquí está la clase de prueba (nótese que tuve que cambiar el ID de perro a Int64 para que funcione con SQLite ...):
using System.Data.Entity;
namespace WebApplication1.Models
{
public class Dog
{
public Dog() { }
public Int64 DogID { get; set; }
public string DogName { get; set; }
}
}
y aquí está la prueba DbContext:
using System.Data.Entity;
namespace WebApplication1.Models
{
public class DogsContext : DbContext
{
public DogsContext() : base() { }
public DbSet<Dog> DogNames { get; set; }
}
}
============= Detalles de la pregunta original ==================
SQLite 1.0.91.0 fue lanzado ayer ( http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki ) con "Agregar soporte para Entity Framework 6". Hay una advertencia en el ''Léame'' incluido que hace que agregue lo siguiente a lo siguiente a web.config / app.config:
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
</configuration>
Si usa NuGet en VS2013 para agregar "System.Data.SQLite (x86 / x64)", ahora obtiene esta línea agregada a web.config / app.config:
<entityFramework>
...
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
...
</entityFramework>
Como prueba, hice una copia de una aplicación NET4.5.1 / MVC4 / EF5 / System.Data.SQlite 1.0.90 y ejecuté PM: update-package en ella. Agregó con éxito la línea anterior a mi web.config y agregué las piezas requeridas de "DbProviderFactories". Reconstruir y ejecutar ... Falló con ''no se encontró proveedor''. Lo intento sin los "DbProviderFactories" ... Fallé con ''no se encontró proveedor''. Elimino la nueva pieza de "proveedor" ... Fallé con ''no se encontró proveedor''. Entonces pruebo un nuevo proyecto pero con y sin identidad (OWIN) en caso de que ese sea el problema. Ni trabajo ... Casi se acabaron las ideas, así que pregunta aquí después de las búsquedas de Google / StackOverflow.
============ 14 de febrero de 2014 ===============
Desafortunadamente, las entradas modificadas y las numerosas variaciones no funcionaron en mi PC ... Estoy usando VS 2013 Pro en Win8.1 Pro x64. Reinstalé System.Data.SQLite. Al menos recibo un nuevo error con la base de datos SQLite existente y la nueva que creó VS2013 (a la que puedo acceder y veo que tiene una estructura adecuada con cero tablas):
"An error occurred connecting to the database. The database might be unavailable. An
exception of type ''System.Data.Entity.Core.ProviderIncompatibleException'' occurred. The
error message is: Schema specified is not valid. Errors: StoreSchemaDefinition(2,64) :
Error 0175: The ADO.NET provider with invariant name ''System.Data.SQLite.EF6'' is either
not registered in the machine or application config file, or could not be loaded. See the
inner exception for details.''"
Tanto EF6 como System.Data.SQLite (x86 / x64) se incorporaron a través de NuGet en las nuevas aplicaciones web de MVC y una aplicación de consola de Windows. Ambos produjeron el error anterior ... Estoy empezando a sospechar que tal vez algo está mal con mi VS3013, pero no quiero pasar otras 6 horas descargando y parchándolo cuando puedo trabajar con MVC4 / SQLite / EF5 ...
===== 17 de febrero de 2014 ========
@Jimi - No hay suerte aquí. Intenté con NET 4.5 y 4.5.1 con un nuevo MVC y Windows Application Project. Intenté con EF6.0.0 y EF6.0.2. Intenté reemplazar los refs 3x SQLite.Data.xxx.dll con copias locales de la instalación de System.Data.SQLite después de agregar "System.Data.SQLite (x86 / x64)" de NuGet. También probé el paquete NuGet "System.Data.SQLite.MSIL" en lugar de agregar DBFactories a las diversas versiones de Web.Config y App.Config que probé.
También intenté crear una aplicación web NET 4.0 MVC4, pero parece que el "System.Data.SQLite (x86 / x64)" de NuGet ahora incluye un requisito para EF6. Siendo optimista, lo seguí y probé varias ''guardar / crear nueva conexión / editar web.config / etc'' pero no funcionó. Me he rendido por ahora y he vuelto a SQLite con Datasets para poder usar Linq con System.Data.DataSetExtensions haciendo DataTables "AsEnumerable" (o Java (jdbc) para personas que quieren una copia sin conexión de la base de datos en su Android Dispositivos con una interfaz mínima de aplicación).
========= 19 de febrero de 2014 =======
@Christian Sauer - No obtuve EF6 y System.Data.SQLite (o System.Data.SQLite.EF6) para trabajar juntos, pero ... pero
Acabo de encontrar una actualización en http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 que dice que hay un paquete SQLite NuGet más nuevo:
mistachkin added on 2014-02-19 03:39:35:
All NuGet packages have been updated to 1.0.91.3. Several fixes are included
that pertain to supporting Entity Framework 6.
Lo estoy probando ahora con un nuevo Proyecto (MVC Web Project en VS2013 usando EF6.0.2 y SQLite 1.0.91.3 que apunta a .NET 4.5.1) ...
No tuve suerte nuevamente con el nuevo SQLite 1.0.91.3. El web.config ha cambiado a:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
</system.data>
Voy a tratar de jugar con la configuración después del trabajo (como lo sugieren Jimi y PCMB) y publicar cualquier hallazgo.
Intenté volver a instalar las versiones de 32 y luego de 64 bits de System.Data.SQLite (con y sin agregar a GAC) pero EF6 no funcionará con SQLite. Si trato de construir manualmente el modelo y las asignaciones, falla en cualquier momento que haga referencia / intente usar EF6. En cuanto a la creación de Modelos de Datos de Entidad (ya sea que se genere a partir de SQLite existente o de la nueva base de datos SQLite) fallará o se producirá un error, sin importar lo que haga a las configuraciones, conexiones o proveedores.
=========== 22 de febrero de 2014 =============
Retrasaron / redujeron la actualización de System.Data.SQLite 1.0.91.3 a 1.0.91.0. Todavía hay un ticket pendiente ( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 ) abierto que incluye algunas sugerencias de mistachkin. Aquí está la aplicación .config mistachkin recomienda intentar (esta configuración no funcionó para mí ni antes ni ...):
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=./northwindEF.db"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
</configuration>
después de probar la sugerencia de mistachkin para agregar los dll''s al GAC (hecho con .NET "gacutil.exe") ...
Acabo de configurar Copy local = True para la biblioteca System.Data.SQLite.EF6 (en References -> System.Data.SQLite.EF6 -> Property) y funciona
Aquí está la solución que funcionó para mí.
Install the System.Data.SQLite package and make sure that the db factories section is like below.
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
Aquí está mi archivo de configuración completo. Estoy ejecutando EF 6.0.2 con SQLite 1.0.91. Todavía no he probado el generador de modelos, pero mis objetos de contexto funcionan bien, y he probado insertar / actualizar / eliminar a través del contexto, así como comandos SQL directos a través de dbcontext. El truco está en la sección entityFramework / providers. Tuve que duplicar las entradas del proveedor de SQLite para el proveedor de EF6, pero uso los nombres de invariante antiguo y nuevo.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="electra.common.configuration.electraConfiguration" type="Electra.Common.Configuration.ElectraConfiguration, Electra.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
</startup>
<connectionStrings>
<add name="DBContext_Server"
connectionString="server=sunset/sql2012;Integrated Security=SSPI;database=Electra;Pooling=true;max pool size=1000;min pool size=5;Connection Lifetime=30;connection timeout=15"
providerName="System.Data.SqlClient" />
<add name="DBContext_ElectraPOS"
connectionString="Data Source=D:/Electra/ElectraWeb/PosEngine.Repository/ElectraPOS.db"
providerName="System.Data.SQLite.EF6" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<electra.common.configuration.electraConfiguration>
<logging>
<levels info="true" warning="true" error="true" debug="true" />
</logging>
</electra.common.configuration.electraConfiguration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Después de 6 horas de intentos de prueba / error, golpes de cabeza en la pared y otras cosas que los desarrolladores hacemos para descubrir cómo funcionan las cosas, creo que logré que funcionara en VS 2013.
Sigue estos pasos.
- Instale System.Data.SQLite si aún no lo ha hecho.
- Obtenga Fetch System.Data.SQLite en su proyecto de NuGet (observe que agrega algunas cosas en la aplicación.config).
- Esta es la parte importante. Guarde su solución y salga de VS 2013.
- Recargue la solución y ahora puede agregar un Modelo de datos de entidad ADO.NET en su proyecto.
Cada vez que desee agregar un modelo, deberá salir de VS 2013 y deberá crear el modelo utilizando "Nueva conexión ...".
¿Por qué funciona de esta manera, dices? El universo funciona de manera misteriosa, digo.
Editar: Trabajando más allá descubrí que para abrir una conexión al modelo, debe cambiar el proveedor en la configuración de <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
a <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
y DbProviderFactories
tiene que estar dentro de una etiqueta system.data
en "not in already".
Después de horas dedicadas a cavar a través de Internet, aquí presento una solución de trabajo
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<connectionStrings>
<add name="NorthwindContext" connectionString="Data Source=Northwind.sl3" providerName="System.Data.SQLite.EF6" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
</system.data>
</configuration>
Experimenté el mismo tipo de error, pero por una razón que parece no haber sido cubierta por las otras respuestas . Entonces me gustaría compartir mi propio caso.
En el conjunto que contiene EDMX, todo estaba bien. En el ensamblado del cliente (ejecución), siempre tuve el mismo error en tiempo de ejecución (el tipo de proveedor Entity Framework ''System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6'' registrado en el archivo de configuración de la aplicación para ADO. No se pudo cargar el proveedor de red con el nombre invariable ''System.Data.SQLite.EF6'').
Noté que para el ensamblaje de EDMX, el "Copiar local" se estableció en verdadero, pero no en el ensamblaje en ejecución. Lo arreglé, y estaba bien. Por lo tanto, si también experimenta este problema y no tiene un proveedor de SQLite en GAC, verifique sus referencias si ha habilitado "copiar localmente" para las DLL de SQLite.
Perdí mucho tiempo antes para pensar en verificar el proveedor y un montón de otras cosas, ¡así que espero que sea útil para otros!
Finalmente, esta solución funciona para mí. DotNet Framewok = 4.5.1 Entity framework = 6.1.1
Descargue esto: sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0.exe
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<!--
NOTE: The extra "remove" element below is to prevent the design-time
support components within EF6 from selecting the legacy ADO.NET
provider for SQLite (i.e. the one without any EF6 support). It
appears to only consider the first ADO.NET provider in the list
within the resulting "app.config" or "web.config" file.
-->
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="VelocityDBEntities" connectionString="metadata=res://*/AppData.Model1.csdl|res://*/AppData.Model1.ssdl|res://*/AppData.Model1.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=F:/VelocityPOS/VelocityDB.sqlite"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Me funcionó en VS 2010 usando una aplicación de consola y haciendo código primero. En cualquier caso, aquí está mi app.config, que se basa en el tutorial EF3 SQLite de Brice ( http://www.bricelam.net/2012/10/entity-framework-on-sqlite.html ):
<?xml version="1.0"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0"/>
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="ChinookContext" connectionString="Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite" providerName="System.Data.SQLite"/>
</connectionStrings>
</configuration>
Solo quiero compartir con toda mi experiencia el mismo problema
Intenté usar System.Data.SQLite
1.0.94 y EF6 y tuve algunos problemas con la conexión a la base de datos. Yo trabajo en VS 2013.4. Después de instalar todos los paquetes necesarios y cheking web.config como pmbc sugerí que todavía tenía el mismo problema con la conexión y la excepción de tipo System.Data.Entity.Core.ProviderIncompatibleException
.
Después de algunas búsquedas adicionales en Internet, encontré que este complemento para VS2013 funciona con las bases de datos SQL Compact y SQLite, que realmente me encantan: https://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1
Ahora puedo usar exsiting SQLite db / create uno desde VS / create EF model usando db existente y todo lo demás
Espero que esto ayude
ACTUALIZAR
Solo algo más de información para obtener ayuda. Aquí está mi sección resultante del archivo .config
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" />
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
</system.data>
También verifique el número de versión de la biblioteca System.Data.SQLite.dll que instaló localmente (por defecto, está instalado en GAC). Su versión de GAC y la versión del paquete en su proyecto actual deben ser iguales. De lo contrario, detectará una excepción cuando inicie su aplicación
Trabajé en esto durante varias horas hoy antes de descubrirlo. El paquete NuGet agrega la entrada apropiada "System.Data.SQLite.EF6" en las fábricas del proveedor EntityFramework, pero debe eliminar o comentar la entrada anterior "System.Data.SQLite". El generador de contexto EF explota si alguna de las entradas del proveedor no es válida, y el antiguo proveedor SQLite 1.0.91 no es compatible con EF6.
EDITAR: Limpiar la configuración permitió a mis otros objetos de contexto (SQL Server) crear instancias, pero aún no crea una instancia de los objetos de contexto SQLite correctamente. La excepción interna es
No se puede encontrar el Proveedor de datos de .Net Framework solicitado. No puede ser instalado.
EDIT 2 / SOLUTION ¡ Finalmente lo descubrí! Creo que hay un problema en System.Data.SQLite que está forzando una referencia al nombre del proveedor System.Data.SQLite en lugar del valor proporcionado en la cadena de conexión. Pude evitar esto al crear dos entradas en la sección del proveedor EntityFramework, una llamada "System.Data.SQlite" y otra llamada "System.Data.SQLite.EF6", pero ambos proveedores usan realmente el proveedor EF6.
<entityFramework>
...
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
Tuve un problema de permiso durante la instalación del paquete, así que obtuve este error. Resolví correr vs2013 como administrador.
asi que:
- Desinstalar el paquete
- cerrar vs2013
- ejecutarlo de nuevo como administrador (importante)
- instalar el nugetpackage nuevamente
al final también anuncio esto en los proveedores (como lo sugirieron los otros usuarios):
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
By installing the latest SQLite from Nuget Package manager, I had got an error when installing SQLite packages (while working on a project that needed edmx over sqlite DB).
Step 1: Read the message carefully. It can reveal what the error message is trying to convey.
P.ej:
An error occurred while connecting to the database. The database might be unavailable. An exception of type ''System.InvalidCastException'' occurred.
The error message is: ''[A]System.Data.SQLite.SQLiteConnection cannot be cast to [B]System.Data.SQLite.SQLiteConnection.
Type A originates from ''System.Data.SQLite, Version=1.0.105.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139'' in the context ''Default''
at location ''C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data.SQLite/v4.0_1.0.105.1__db937bc2d44ff139/System.Data.SQLite.dll''.
Type B originates from ''System.Data.SQLite, Version=1.0.106.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139'' in the context ''LoadNeither''
at location ''C:/Users/Ganesh Kamath/AppData/Local/Microsoft/VisualStudio/14.0/ProjectAssemblies/og1mcjvn01/System.Data.SQLite.dll''.''.
After reading this I realized that I had chosen Version 1.0.106.0 for upgrade.
Essentially the message says that it knows version 1.0.105.1 but not version 1.0.106.0 .
Step 2: Remove the version causing the problem by manually selecting the occurence in Nuget Package for Solution option in Visual Studio.
Tools > Nuget Package Manager > Manage Nuget Packages for Solution...
Step 3: Use Nuget Command line to install the version of SQLite that the system understands.
In the example above, the version is 1.0.105.1
Tools > Nuget Package Manager > Package Manager Console
The commands needed for this will look like the following:
Install-Package System.Data.SQLite -Version 1.0.105.1
Install-Package System.Data.SQLite.Core -Version 1.0.105.1
Install-Package System.Data.SQLite.EF6 -Version 1.0.105.1
That works for me :
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<!--<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<remove invariant="System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />-->
</DbProviderFactories>
</system.data>
With the latest nuget package (1.0.94.1) : https://www.nuget.org/packages/System.Data.SQLite/ And SQLite tools : Setups for 32-bit Windows (.NET Framework 4.5.1) at http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
esto funcionó para mí, existen algunos errores internos mientras se ejecuta probablemente las diferencias entre cómo EF le gusta tener otras 2 tablas para el código primero __MigrationHistory & EdmMetadata. Lo llamaría trivial por ahora, pero si realmente quiere aprovechar CodeFirst esas tablas tienen que crearse manualmente, lo asumo por el momento.
Editar - Solo entrada en la lista de proveedores y eliminé todas las referencias a SqlServer ...
Vs2013 últimotest SQLite Nuget.