2009-02-16 22 views
6

Tengo una aplicación ASP.NET MVC que utiliza la base de datos SQLite a través de Entity Framework. Todo funciona en el servidor web de desarrollo local de VS 2008.Implementación de Entity Framework + SQLite

Sin embargo, la implementación de la aplicación web a mi proveedor de servicios hace que este error:

[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.] 
    System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1308959 
    System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35 

proveedor de servicios ha comentado que no son compatibles con SQLite. Pensé que SQLite es independiente de la configuración del proveedor de servicios ya que es App_Data implementable.

¿Alguien ha tenido éxito en la implementación exitosa de Entity Framework + SQLite?

Cheers, -pom-

Respuesta

0

¿Usted ha intentado añadir la DLL (s) requerido para el directorio bin de su aplicación? Es posible que desee consultar el artículo de Phil Haack en Bin Deploying ASP.NET MVC para obtener ideas sobre cómo hacerlo automáticamente.

+0

Hola, gracias por la respuesta. Sí, he visto el blogpost de Phil. Puedo implementar la aplicación ASP.NET MVC normal sin problemas. Es la combinación con Entity Framework + SQLite lo que es problemático. He aumentado tanto System.Data.Entity.dll como System.Data.SQLite.dll en la carpeta bin. Sin suerte todavía. – Pompair

+1

Hmmm. ¿Están en su sección de ensamblajes en la configuración web? – tvanfosson

12

es poco probable que estar leyendo esto más, pero que se está perdiendo lo siguiente en su app.config (o, para usted, web.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" /> 
    </DbProviderFactories> 
    </system.data> 
</configuration> 

Específicamente, si estás Al usar sqlite en una biblioteca que está vinculada a su sitio web, debe agregar esto al archivo de configuración del sitio web, ¡no a la biblioteca! Esto se debe a la forma en que está cargando el proveedor: esencialmente, usted está determinando en tiempo de ejecución qué dll cargar, usando la cadena "System.Data.SQLite", y ubicando el proveedor apropiado se hace usando la configuración de la entrada montaje.

Editar: Por cierto, cuando se escribe la biblioteca que tiene una dependencia SQLite, puede evitar esta complejidad. No necesita usar DbProviderFactories para buscar sqlite en tiempo de ejecución; también puede tomar una dependencia en tiempo de compilación, que puede ser más fácil de administrar. A continuación, puede pasar por alto la sección de app.config anteriormente, y en lugar de reemplazar todas las instancias:

DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection() 

con

System.Data.SQLite.SQLiteFactory.Instance.CreateConnection() 

Si lo hace, usted está utilizando una llamada a la librería sencilla para crear la conexión y no hay selección en tiempo de ejecución del proveedor de db. Eso puede ser menos flexible ya que ya no puede intercambiar proveedores de datos a través del archivo de configuración, pero para muchas bibliotecas es suficiente. Desafortunadamente, si no controlas el código de la biblioteca, esta no es una opción.

+1

Gracias por la respuesta ... – Funky81

+0

Gracias. Esto funcionó para mí también: en una aplicación wpf que hacía referencia a una biblioteca de clase con acceso a datos SQLite. –

0

SQLite necesita permiso de plena confianza para la implementación de aplicaciones ASP.NET. Muchos proveedores de hosting compartido no permiten eso. Es posible que desee comprobar esto.