Borysław B.

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
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: SQLite dla UT [ASP.net]

Nie używałem jeszcze SQLite, ale proponuję zapoznać się z artykułami:
http://www.codeproject.com/Articles/236918/Using-SQLit...

http://geekswithblogs.net/danemorgridge/archive/2010/0...
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: SQLite dla UT [ASP.net]

Do przenośnych celów dla .NET została stworzona baza pt. MS SQL Server Compact Edition
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: SQLite dla UT [ASP.net]

Ja nie chcę MS SQL SCE. Chcę SQLite. Uważam ten system bazodanowy za lepszy pod wieloma względami od rozwiązań MS.

Kiedyś spotkałem się z takim rozwiązaniem, ze UT w ASP.NET są na SQLite.
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: SQLite dla UT [ASP.net]

Możesz mi te względy wymienić? Te, w których jest lepszy od MS SQL. Niezmiernie ciekaw jestem. Parę lat temu porównywałem i wyszło jak wyszło... Może od tego czasu się coś zmieniło...

pozdrawiaMM
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: SQLite dla UT [ASP.net]

Moja aplikacja współpracuje z MySql. Ja potrzebuję zaś szybkiej, lekkiej bazy do lokalnych testów.

1) SQLite będzie szybszy bo jego jeden, czy tam dwa dll-e pracują jako jeden proces. Całe buforowanie danych i operacje odbywają się w jednym miejscu. Nie potrzeba żadnej komunikacji międzyprocesowej
2) Podczas wykonywania kwerendy w SQLite wciąż pozostajesz wewnątrz procesu Twojej własnej aplikacji .NET - możesz, gdy zechcesz, w prosty sposób pobrać dodatkowe dane z dowolnego źródła i zapodać je do SQLite
3) SQLite nie potrzebuje instalatora na lokalnym komputerze developera

Te wszystkie cechy sprawiają, że do prostych zastosowań takich jak UT, SQLite ma dużą przewagę. Bierzesz kod źródłowy i po prostu pracujesz.

http://pradeepgururani.blogspot.com/2010/01/sqlite.html

edit: Oczywiście mogę się mylić w tych sprawach. Dodam od siebie, że miałem kłopot ze skorzystaniem z SQL server compact, bo nie chciało coś się tam zainstalować.Borysław Bobulski edytował(a) ten post dnia 27.08.12 o godzinie 20:22

konto usunięte

Temat: SQLite dla UT [ASP.net]

Borysław Bobulski:
Moja aplikacja współpracuje z MySql. Ja potrzebuję zaś szybkiej, lekkiej bazy do lokalnych testów.

1) SQLite będzie szybszy bo jego jeden, czy tam dwa dll-e pracują jako jeden proces. Całe buforowanie danych i operacje odbywają się w jednym miejscu. Nie potrzeba żadnej komunikacji międzyprocesowej
2) Podczas wykonywania kwerendy w SQLite wciąż pozostajesz wewnątrz procesu Twojej własnej aplikacji .NET - możesz, gdy zechcesz, w prosty sposób pobrać dodatkowe dane z dowolnego źródła i zapodać je do SQLite
3) SQLite nie potrzebuje instalatora na lokalnym komputerze developera

Te wszystkie cechy sprawiają, że do prostych zastosowań takich jak UT, SQLite ma dużą przewagę. Bierzesz kod źródłowy i po prostu pracujesz.

http://pradeepgururani.blogspot.com/2010/01/sqlite.html

edit: Oczywiście mogę się mylić w tych sprawach. Dodam od siebie, że miałem kłopot ze skorzystaniem z SQL server compact, bo nie chciało coś się tam zainstalować.

JET SQL też nie potrzebuje instalki i jest na każdym komputerze, a powód dla którego nie sprawdziłeś SQL Compact to chyba skecz z Monty Pythona
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: SQLite dla UT [ASP.net]

Nie bądź taki pewny siebie. Sprawdziłem z SQL Compact przy okazji badania Nerd Dinner.

A powód dla którego nie korzystałem z SQL Compact to komunikat przy dodawaniu mdf:

Connection to SQL Server files (*.mdf) require SQL server express 2005 to function properly. please verify the installation of the component or download from the URL: go.microsoft.com/fwlink/?linkId=4925


Więc gdzie to działanie na każdym komputerze bez instalacji? Pomyślałem, że coś nie tak mam z instalacją samego Visual Studio i porzuciłem mdf-y jako zbyt problematyczne, na rzecz SQLite.

Komunikat taki napotykam nawet wtedy, gdy otwieram nowy project template z MVC3 - nie da się dodać MDF-ów.

konto usunięte

Temat: SQLite dla UT [ASP.net]

Borysław Bobulski:
Nie bądź taki pewny siebie. Sprawdziłem z SQL Compact przy okazji badania Nerd Dinner.

A powód dla którego nie korzystałem z SQL Compact to komunikat przy dodawaniu mdf:

Connection to SQL Server files (*.mdf) require SQL server express 2005 to function properly. please verify the installation of the component or download from the URL: go.microsoft.com/fwlink/?linkId=4925


Więc gdzie to działanie na każdym komputerze bez instalacji? Pomyślałem, że coś nie tak mam z instalacją samego Visual Studio i porzuciłem mdf-y jako zbyt problematyczne, na rzecz SQLite.

Komunikat taki napotykam nawet wtedy, gdy otwieram nowy project template z MVC3 - nie da się dodać MDF-ów.

widzisz różnicę między SQL server express a SQL Compact?

poza tym jaka jest różnica między SQL Lite a JET SQL? moim zadnim JET jest lepszy bo ma większe możliwości silnika

konto usunięte

Temat: SQLite dla UT [ASP.net]

Przemysław R.:
Borysław Bobulski:
Nie bądź taki pewny siebie. Sprawdziłem z SQL Compact przy okazji badania Nerd Dinner.

A powód dla którego nie korzystałem z SQL Compact to komunikat przy dodawaniu mdf:

Connection to SQL Server files (*.mdf) require SQL server express 2005 to function properly. please verify the installation of the component or download from the URL: go.microsoft.com/fwlink/?linkId=4925


Więc gdzie to działanie na każdym komputerze bez instalacji? Pomyślałem, że coś nie tak mam z instalacją samego Visual Studio i porzuciłem mdf-y jako zbyt problematyczne, na rzecz SQLite.

Komunikat taki napotykam nawet wtedy, gdy otwieram nowy project template z MVC3 - nie da się dodać MDF-ów.

widzisz różnicę między SQL server express a SQL Compact?

poza tym jaka jest różnica między SQL Lite a JET SQL? moim zadnim JET jest lepszy bo ma większe możliwości silnika
Może ich nie potrzebuje i w zupełności wystarcza to do jest w SQl Lite?

konto usunięte

Temat: SQLite dla UT [ASP.net]

Tomek P.:
poza tym jaka jest różnica między SQL Lite a JET SQL? moim zadnim JET jest lepszy bo ma większe możliwości silnika
Może ich nie potrzebuje i w zupełności wystarcza to do jest w SQl Lite?

skoro twierdzi że SQLite jest lepszy od SQL Compact Edition, bo ten nie chciał się zainstalować, co prawdą nie było bo plik był od SQL Server Express, to pewnie masz rację, coś jest w tej logice
1) SQLite będzie szybszy bo jego jeden, czy tam dwa dll-e pracują jako jeden proces. Całe buforowanie danych i operacje odbywają się w jednym miejscu. Nie potrzeba żadnej komunikacji międzyprocesowej
2) Podczas wykonywania kwerendy w SQLite wciąż pozostajesz wewnątrz procesu Twojej własnej aplikacji .NET - możesz, gdy zechcesz, w prosty sposób pobrać dodatkowe dane z dowolnego źródła i zapodać je do SQLite
3) SQLite nie potrzebuje instalatora na lokalnym komputerze developera

a tak na serio SQLLite vs SQL JET wady i zalety? bo jakoś nie widzę za biorąc pod uwagę założenie powyżej, co gorsza ziała z marszu bez żadnych dodatkowych bibliotek na każdym komputerze z Windowsem, czego nie można powiedzieć o SQLLite
Czarek Żurawski

Czarek Żurawski menadżer, analityk,
koordynator,
kierownik projektu,
serv...

Temat: SQLite dla UT [ASP.net]

Wracając do meritum
w jednym z moich porzuconych projektów użyłem SQLitePlugin
http://sqlite.phxsoftware.com/

chodziło pięknie
w projekcie dodajesz referencje do pluginu
a pozniej podajesz namiary na istniejaca baze danych:
private const String databaseString = "C:\\WpfBrowserControlProject\\Database\\database.s3db";

i metoda np:
private void dbInit(string databaseString)
{
try
{
db = new SQLitePluginClass(databaseString);
}
catch (Exception)
{
MessageBox.Show("Problem z bazą danych. Zainstaluj program ponownie!");
}
}
iniciujesz wrapper dla polecen do bazy
fragment metody zapisujacej do bazy parametry kursora
public void elemClick(object sender,HtmlElementEventArgs elementEventArgs)
{
string tableName = "MouseCursorPosition";
string exc = null;
Dictionary<string,string> data = new Dictionary<string, string>();
data.Add("x","567");
data.Add("y", "3567");
data.Add("timestamp", DateTime.Now.ToString());
try
{
var result = db.insert(tableName, data);
}
catch (Exception exception)
{

throw exception;
}

}

Następna dyskusja:

ASP.NET MVC eBook




Wyślij zaproszenie do