Simple.Data i generowanie SQL

2

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.

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor jedynego polskiego podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook.

2 Comments

  1. Pingback: dotnetomaniak.pl

  2. tomaszk-poz on

    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 😀
    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ć…