Borysław
B.
Mgr inżynier
informatyki,
właściciel Matrix
Reliability
Temat: SQLite dla UT [ASP.net]
Czytałem troszkę Google i okazało się, że mam dwie opcje do wyboru - albo mockować na podstawie metadata (ale nie udało mi się), albo postawić bazę do UT korzystając z SQLite. Wybrałem to drugie rozwiązanie.Mój Database Factory stawia mi ObjectContext. Dotychczas context współpracował świetnie z MySql. Postanowiłem podmienić ręcznie connection string w konstruktorze i utknąłem na kilka godzin.
private SqliteEntities CreateDatabase()
{
var conn =
@"metadata=res://*/EntitiesModel.Model.csdl|res://*/EntitiesModel.Model.ssdl|res://*/EntitiesModel.Model.msl;
provider=System.Data.SQLite;
provider connection string="
Data Source=D:\Praca\EntitiesModel\db.sqlite"";
return _database = new SqliteEntities (conn);
}
Jednakże przy takim wywołaniu zgłasza mi błąd: Nieobsługiwane słowo kluczowe: 'data source'.
Dodałem też SQLite do App.config
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<remove invariant="System.Data.SQLite"/>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<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>
Mam też referencje w testach do System.Data.SQLite.
Proszę, pomóżcie. Co jeszcze trzeba zmienić, żeby powstało połączenie EF z Sqlite?
edit:
Chyba sobie daruję tego Sqlite. Zrezygnowałem na razie z podawania ręcznie ConnectionStringa, na rzecz po prostu całkowitej konfiguracji App.config w UT. I pewnie działałoby, gdyby nie te przeklęte mieszane kody.
Okazuje się, że SQLite posiada bibliotekę SQLite.Interop.dll w dwóch wersjach x64 i x86. Mało tego, bibliotekę trzeba pre-buildem skopiować do katalogu bin wraz z inną biblioteką msvcr100.dll. Nawet jednak, gdy tak zrobię - zgłasza mi wyjątek.
Straciłem mnóstwo czasu. Postawienie bazy MySql na localhost to jakieś 10 sekund i śmiga. Tylko, że takie rozwiązanie jest nieprzenośne, a zależało mi na przenośności.
Testy MySql na localhost wymagają co najmniej dołączenia skryptu tworzącego bazę danych do projektu, a jest to mało eleganckie rozwiązanie.
Komuś się udało użyć SQLite w unit testach MVC?Borysław Bobulski edytował(a) ten post dnia 24.08.12 o godzinie 02:47