2016-03-24 16 views
5

Gram z Dapperem, próbując sprawdzić, czy jest to dobra, lekka alternatywa dla Entity Framework. Do tej pory byłem pod wrażeniem jego zdolności do szybkiego wyciągnięcia podmiotu <model> z DB i pobrania go do IEnumerable modelu lub po prostu utworzenia pojedynczej instancji modelu. Bardzo śliskie.Czy Dapper może być używany do aktualizacji i wstawiania modeli?

Ale to, czego nie widzę, to łatwy sposób na zaktualizowanie tego modelu z powrotem do bazy danych.

Przykład:

public class Dog 
{ 
    public Guid Id { get; set; } 
    public int? Age { get; set; } 
    public string Name { get; set; } 
    public float? Weight { get; set; } 
} 

Możemy łatwo utworzyć IEnumerable psa następująco:

IEnumerable<Dog> dogs = connection.Query<Dog>("SELECT * FROM Dog") 

Albo, dla pojedynczej instancji:

Dog dog = connection.Query<Dog>("SELECT * FROM Dog WHERE DogId = @dogid") 

To wszystko działa świetnie. Ale teraz, jeśli wprowadzimy zmiany w "psie" (powiedzmy, po prostu zmieńmy jego wagę), istnieje łatwy, szybki i łatwy sposób na przeniesienie tego obiektu z powrotem do bazy danych bez konieczności ręcznego dodawania zapytania, wystawiania każdego pola ?

Dzięki!

+1

Wydaje się, że przechodząc '' Lista powinny [wstawić kilka pozycji] (http://stackoverflow.com/a/6500834/69809)? Btw trzymać się sparametryzowanych zapytań ("SELECT * FROM Dog WHERE DogId = @ DogId'), chyba że lubisz ataki sql injection. – Groo

+0

Jak działałaby ta składnia? Patrząc na ReadMe na GitHub, nie widzę tego przykładu. https://github.com/StackExchange/dapper-dot-net –

+0

Prawdopodobnie podoba mi się odpowiedź, do której dołączyłem: 'connection.Execute (@" update Dog set Name = @ Name, Age = @ Age ", list);'? – Groo

Odpowiedz

6

Można użyć klasy SqlMapperExtensions od Dapper.Contrib.Extensions:

using Dapper; 
using Dapper.Contrib.Extensions; 

// don't forget the using since Update is an extension method 

Dog entity; // you got it from somewhere 
entity.Name = "fancy new dog name"; 
connection.Update(entity); 

aby to zadziałało trzeba dodać [Key] adnotacji do id. powinien wyglądać mniej więcej tak:

using System.ComponentModel.DataAnnotations; 

public class Dog 
{ 
    [Key] 
    public long Id { get; set; } 
    public int? Age { get; set; } 
    public string Name { get; set; } 
    public float? Weight { get; set; } 
} 
+0

OK! To jest o wiele więcej, niż oczekiwałem. Minie trochę czasu, zanim będę mógł to przetestować, ale po tym, jak to zrobię, i kiedy zadzwonię, oznaczę to jako odpowiedź. –

6

Dapper to Micro-Orm charakteryzujący się prostotą i szybkością. Zachowanie, które opisujesz, jest bardziej związane z pełnoprawnym ORMem, co implikuje posiadanie koncepcji sesji, mapowania i generowania zapytań (z nadzieją, że sterowniki dla różnych smaków SQL). To nie jest na pewno duch Dapper, że i tak by proces aktualizowania/wstawianie easyer że zwykły ADO.NET, przyjmując jako parametry obiektu POCO na zapytanie, tj:

.Execute("update mydogs set [email protected] where [email protected]",dog); 
+0

OK, to ma sens. Kilka pytań. W jaki sposób są wypełniane (at) Age i (at) Id? Czy są automatycznie wypełniane przez ", pies" na końcu zapytania? (Nie mogę użyć znaku AT w tym komentarzu lub przepełnienie stosu, myślę, że próbuję powiadomić użytkownika) –

+0

Tak, parametr zapełniany jest przez pobranie wartości właściwości instancji "pies", z odpowiednimi nazwami –

Powiązane problemy