Dapper.NET
Podstawowe zapytania
Szukaj…
Składnia
- public static IEnumerable <T> Zapytanie <T> (to IDbConnection cnn, string sql, parametr param = null, SqlTransaction transaction = null, bool buforowany = true)
- public static IEnumerable <dynamic> Query (ten IDbConnection cnn, string sql, obiekt param = null, SqlTransaction transaction = null, bool buffered = true)
Parametry
Parametr | Detale |
---|---|
cnn | Twoje połączenie z bazą danych, które musi być już otwarte. |
sql | Polecenie do wykonania. |
param | Obiekt do wyodrębnienia parametrów. |
transakcja | Transakcja, której częścią jest to zapytanie, jeśli istnieje. |
buforowane | Określa, czy buforować odczyt wyników zapytania. Jest to parametr opcjonalny z domyślną wartością true. Gdy buforowane jest true, wyniki są buforowane na List<T> a następnie zwracane jako IEnumerable<T> który jest bezpieczny dla wielokrotnego wyliczania. Gdy buforowane jest false, połączenie sql jest utrzymywane otwarte do czasu zakończenia odczytu, co pozwala na przetworzenie pojedynczego wiersza w pamięci. Wiele wyliczeń spowoduje odrodzenie dodatkowych połączeń z bazą danych. Chociaż buforowane fałsz jest bardzo wydajne w zmniejszaniu zużycia pamięci, jeśli zachowuje się tylko bardzo małe fragmenty zwracanych rekordów, ma znaczny narzut wydajności w porównaniu do chętnego materializowania zestawu wyników. Wreszcie, jeśli masz wiele równoległych niebuforowanych połączeń sql, musisz rozważyć głodzenie puli połączeń, powodując żądania blokowania, aż połączenia będą dostępne. |
Zapytanie o typ statyczny
W przypadku typów znanych w czasie kompilacji użyj parametru ogólnego z Query<T>
.
public class Dog
{
public int? Age { get; set; }
public Guid Id { get; set; }
public string Name { get; set; }
public float? Weight { get; set; }
public int IgnoredProperty { get { return 1; } }
}
//
IDBConnection db = /* ... */;
var @params = new { age = 3 };
var sql = "SELECT * FROM dbo.Dogs WHERE Age = @age";
IEnumerable<Dog> dogs = db.Query<Dog>(sql, @params);
Zapytania o typy dynamiczne
Możesz także zapytać dynamicznie, jeśli zrezygnujesz z typu ogólnego.
IDBConnection db = /* ... */;
IEnumerable<dynamic> result = db.Query("SELECT 1 as A, 2 as B");
var first = result.First();
int a = (int)first.A; // 1
int b = (int)first.B; // 2
Zapytanie z parametrami dynamicznymi
var color = "Black";
var age = 4;
var query = "Select * from Cats where Color = :Color and Age > :Age";
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("Color", color);
dynamicParameters.Add("Age", age);
using (var connection = new SqlConnection(/* Your Connection String Here */))
{
IEnumerable<dynamic> results = connection.Query(query, dynamicParameters);
}
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow