2009-02-16 39 views
6

Varlık Çerçevesi aracılığıyla SQLite veritabanını kullanan bir ASP.NET MVC uygulamasına sahibim. Her şey, VS 2008'in yerel geliştirme web sunucusu üzerinde çalışır.Entity Framework + SQLite dağıtımı

Ancak, benim servis sağlayıcı web uygulamasını dağıtmak bu hataya neden:

[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 

Hizmet sağlayıcı onlar SQLite'ı desteklemediğini görüş bildirdi. App_Data konuşlandırılabildiğinden bu SQLite servis sağlayıcının ayarlarından bağımsız olsa da.

Başarılı bir Entity Framework + SQLite dağıtımı deneyimi olan var mı?

Alkış, -pom-

cevap

0

Eğer uygulamanın bin dizinine gerekli DLL (ler) ekleyerek denediniz mi? Bunun nasıl yapılacağına dair fikirler için Phil Haack'ın Bin Deploying ASP.NET MVC'daki makalesine bakmak isteyebilirsiniz.

+0

Merhaba, bir cevap için teşekkürler. Evet, Phil'in blog yazısını gördüm. Ben sadece normal ASP.NET MVC uygulamasını dağıtabilirim. Sorunlu olan Entity Framework + SQLite ile kombinasyon. Ben System.Data.Entity.dll ve System.Data.SQLite.dll bin klasörüne ikisini de ettik. Henüz şans yok. – Pompair

+1

Hmmm. Web yapılandırmasında derlemeler bölümünüzde mi? – tvanfosson

12

Bundan sonra bunu okuma olası değildir, ancak (web.config sizin için, veya) app.config şu eksik: sen eğer,

<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> 

Özellikle Web sitenize bağlı bir kütüphanede sqlite kullanarak, bu kütüphaneyi değil web sitesinin yapılandırma dosyasına eklemelisiniz! Bu, sağlayıcısını nasıl yüklediğinizden kaynaklanır: temel olarak, "System.Data.SQLite" dizesini kullanarak yüklenecek dll'de çalışma zamanını belirlersiniz ve uygun sağlayıcıyı bulmak, girişin ayarlarını kullanarak yapılır montaj.

Düzenleme: Bir sqlite dependancy sahip kütüphane yazarken arada, bu karmaşıklığı önleyebilirsiniz. Çalışma zamanında sqlite aramak için DbProviderFactories'u kullanmanız gerekmez; Daha kolay yönetilebilen bir derleme zamanı bağımlılığı da alabilirsiniz. Sonra yukarıdaki app.config bölümü geçebilirsiniz ve bunun yerine tüm örneklerini değiştirmek:

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

, bağlantıyı oluşturmak için düz bir kütüphane çağrısı kullandığınız

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

Bunu yaparsanız

ile ve db sağlayıcısının çalışma zamanı seçimi yok. Bu, daha az esnek olabilir, çünkü yapılandırma sunucusu aracılığıyla veri sağlayıcıları değiştiremezsiniz, ancak yeterli sayıda kütüphane için. Maalesef, kütüphane kodunu kontrol etmezseniz, bu bir seçenek değildir.

+1

Cevabınız için teşekkürler ... – Funky81

+0

Teşekkürler. Bu benim için de çalıştı: SQLite veri erişimi ile bir sınıf kütüphanesi başvurulan bir wpf uygulamasında. –

0

SQLite, ASP.NET uygulama dağıtımı için tam güven iznine gereksinim duyar. Birçok paylaşılan barındırma sağlayıcıları buna izin vermez. Bunu kontrol etmeyeceksin.