Interesuje mnie korzystanie z Dappera - ale z tego, co mogę powiedzieć, obsługuje tylko zapytania i wykonywanie. Nie widzę, aby Dapper zawierał sposób wstawiania i aktualizowania obiektów.
Biorąc pod uwagę, że nasz projekt (większość projektów?) Wymaga wstawiania i aktualizacji, jaka jest najlepsza praktyka wykonywania wkładek i aktualizacji obok eleganckiego?
Najlepiej nie musielibyśmy uciekać się do metody budowania parametrów ADO.NET itp.
Najlepszą odpowiedzią, jaką mogę teraz wymyślić, jest użycie LinqToSQL do wstawiania i aktualizacji. Czy jest lepsza odpowiedź?
Odpowiedzi:
Chcemy zbudować kilka pomocników, nadal decydując się na interfejsy API i czy to będzie podstawowe, czy nie. Postęp : patrz: https://code.google.com/archive/p/dapper-dot-net/issues/6 .
W międzyczasie możesz wykonać następujące czynności
etcetera
Zobacz także mój post na blogu: Ten denerwujący problem z WSTAWIENIEM
Aktualizacja
Jak wskazano w komentarzach, w projekcie Dapper.Contrib dostępnych jest teraz kilka rozszerzeń w postaci tych
IDbConnection
metod rozszerzenia:źródło
set
as,cnn.Execute("update Table SET val = @val where Id = @id", new {val, id = 1});
czy też jest specyficzny? Jestem nowy w eleganckim i szukałem przykładu aktualizacji :)var updateCat = connection.Execute("UPDATE tCategories SET sCategory = @val WHERE iCategoryID = @id", new { val = "dapper test", id = 23 });
i zadziałało. Bez użycia SET otrzymuję błąd składni SQLException w pobliżu sCategory.Wykonywanie operacji CRUD za pomocą Dappera jest łatwym zadaniem. Wspomniałem poniższe przykłady, które powinny pomóc w operacjach CRUD.
Kod dla C RUD:
Metoda nr 1: Ta metoda jest używana podczas wstawiania wartości z różnych encji.
Metoda nr 2: Ta metoda jest używana, gdy właściwości encji mają takie same nazwy jak kolumny SQL. Zatem Dapper jest ORM odwzorowuje właściwości encji z pasującymi kolumnami SQL.
Kod dla C R UD:
Kod dla CR U D:
Kod dla CRU D :
źródło
możesz to zrobić w następujący sposób:
źródło
using-statement
aby połączenie zostało zamknięte nawet w przypadku wyjątku.sqlConnection.Execute(sqlQuery, customerEntity);
sqlConnection.Execute(sqlQuery, customerEntity);
Korzystanie z Dapper.Contrib jest tak proste:
Wstaw listę:
Wstaw pojedynczy:
Zaktualizuj listę:
Aktualizacja pojedyncza:
Źródło: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib
źródło
conn.Update(yourClass)
przypadku, gdy niektóre właściwości są puste , UPDATE pola do NULL ? Nie działa. Zaktualizuj pole do NULL .Not partials updates
Możesz także użyć narzędzia dapper z procedurą składowaną i ogólnym sposobem, dzięki któremu wszystko jest łatwe do zarządzania.
Zdefiniuj swoje połączenie:
Utwórz interfejs, aby zdefiniować metody Dappera, których naprawdę potrzebujesz:
Zaimplementuj interfejs:
Możesz teraz dzwonić z modelu w zależności od potrzeb:
Możesz również przekazać parametry:
Teraz zadzwoń z kontrolerów:
Mam nadzieję, że zapobiegnie to powtórzeniu kodu i zapewni bezpieczeństwo;
źródło
Możesz spróbować:
źródło
Zamiast używać bibliotek zewnętrznych do operacji zapytań, wolałbym raczej pisać zapytania we własnym zakresie. Ponieważ korzystanie z jakichkolwiek pakietów innych firm odbierałoby główną zaletę korzystania z programu dapper, tj. Elastyczność pisania zapytań.
Teraz występuje problem z pisaniem zapytania wstawiania lub aktualizacji dla całego obiektu. W tym celu można po prostu utworzyć pomocników, takich jak poniżej:
InsertQueryBuilder:
Teraz, po prostu przekazując nazwę kolumn do wstawienia, całe zapytanie zostanie utworzone automatycznie, jak poniżej:
Można również zmodyfikować funkcję, aby zwracała całą instrukcję INSERT, przekazując parametr TableName.
Upewnij się, że nazwy właściwości Class są zgodne z nazwami pól w bazie danych. Wtedy tylko Ty możesz przekazać cały obiekt (jak w naszym przypadku userObj), a wartości zostaną automatycznie zmapowane.
W ten sam sposób możesz również mieć funkcję pomocniczą dla zapytania UPDATE:
I używaj go w następujący sposób:
Chociaż w tych funkcjach pomocniczych również musisz przekazać nazwę pól, które chcesz wstawić lub zaktualizować, ale przynajmniej masz pełną kontrolę nad zapytaniem i możesz również zawierać różne klauzule WHERE, gdy jest to wymagane.
Dzięki tym funkcjom pomocniczym zapisujesz następujące wiersze kodu:
Wstaw zapytanie:
W przypadku zapytania o aktualizację:
Wydaje się, że istnieje różnica kilku linii kodu, ale jeśli chodzi o wykonywanie operacji wstawiania lub aktualizacji z tabelą zawierającą więcej niż 10 pól, można poczuć różnicę.
Możesz użyć operatora nameof, aby przekazać nazwę pola w funkcji, aby uniknąć literówek
Zamiast:
Możesz pisać:
źródło