przeportowanie aplikacji z mysql do sqlite

0

Napisałem aplikację w c#, korzysta ona z bazy mysql, ale zaistniała konieczność zmiany bazy danych na sqlite. Osobiście wolałbym zostawić mysql'a a sqlite dodać jako opcjonalną bazę danych. Czy istnieje jakiś sposób, żeby w miarę przezroczysty sposób korzystać z mysqla i sqlita ?

0

Nie jestem ekspertem, ale to zależy od skali projektu itd. Zależy również od tego, jak komunikujesz się z bazą, czy np. przez ADO warstwę połączeniową czy np. przez Entity Framework. Nie wiem również jakie jest wsparcie dla Entity Framework dla SQLite, jednak myślę , że nie będzie źle.

a) Entity Framework
Jeśli baza MsSQL i SQLite wyglądają identycznie (nazwy tabel, pól itd), to myślę, że można byłoby stworzyć dla tych dwa ADO.NET Entity Data Model, a następnie użyć i tak zalecanego wzorca projektowego Repository (znajdziesz coś na google :)). Mniej więcej, chodzi o to, aby jedna tabela = jeden obiekt, a jedna klasa repository odpowiadała za obsługę tego jednego obiektu, masz tam możliwość dodania go do bazy, edycji, usunięcia, wybrania z bazy itd.

Jeśli wszystko byłoby ok, to dla każdego obiektu miałbyś jedną klasę Repository, który przyjmowała by albo MySqlEntity albo SQLiteRepository, choć z drugiej strony nie wiem czy tak by poszło hm... Jeśli nie, to musiałbyś wprowadzić dodatkową warstwę, gdzie do Repository przekazywałbyś jakiś wspólny interface np IDataBase, a obiekty z Entity zamienić na POCO. Następnie stworzyć klasy implementujące ten IDataBase i różnie obsługujące te klasy Poco, tzn mysql / sqlite.

b) ADO.NET przez np. MySqlConnect, MySqlCommand itd

Tutaj zrobiłbym bardzo podobnie, dla dwóch baz danych stworzyłbym jakieś klasy Repository(jak wyżej).

Do obsługi bazy danych, stworzyłbym klasę abstrakcyjną wykożystującą DbCommand, DbConnect i na tym bym pracował (większość zapytań w SQLite i MySql i tak pewnie będzie taka sama), następnie z tej abstrakcyjnej klasy stworzył normalną dla Mysql i SqLite i ew przysłonił niepasujące metody.

1 użytkowników online, w tym zalogowanych: 0, gości: 1