Simple.Data jest bardzo fajne, ale czasem… niewystarczające. Na przykład na chwilę obecną nie są wspierane podzapytania. Wtedy z pomocą przychodzi biblioteka Simple.Data.RawSql dająca możliwość wysyłania “gołego” SQLa przez Simple.Data.
Tego gołego SQLa trzeba jednak jakoś zbudować/skleić. Zamiast robić to ręcznie, możemy… użyć Simple.Data! Nie jest to chyba nigdzie oficjalnie w dokumentacji opisane, więc zamieszczam kod transformujący zapytanie na tekst z użyciem aktualnego providera:
dynamic adapter = db.GetAdapter(); var queryBuilder = new QueryBuilder(adapter); var query = _db.Db.Users.All(); IEnumerable<SimpleQueryClauseBase> temp; ICommandBuilder commandBuilder = queryBuilder.Build(query, out temp); string sql = commandBuilder.Text;
Warto zwrócić uwagę, że uzyskany commandBuilder zawiera słownik Parameters wytworzonymi podczas generowania zapytania – mogą okazać się przydatne jeśli to parametryzowane zapytanie w ten sposób generujemy.
Simple.Data i generowanie SQL | Maciej Aniserowicz o programowaniu…
Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl…
Mam wrażenie, że ta Simple.Data jest jakieś takie niekompletne.
Po pierwsze:
Męczyłem się z uzyskaniem wynikowego sql, analogia z przykładu z git-a nie działała (ćwiczyłem w mstest).
Pomogło spojrzenie do źródeł i wykorzystanie SimpleDataTraceSources.TraceSource.Listeners.Add(myListener).
Po drugie: nie jestem w stanie uzyskać prostego joina na mojej bazie (fakt – bez jawnego obcego klucza w bazie). No ale od czego są noce i dnie :-D
Jak dla mnie na razie zostaje przy EF. Ale nie powiem, ciekawe doświadczenie przy dociekaniu co i jak, ale mimo wszystko nie tak to powinno być…