2016-06-23 18 views
3

Ich benutze Dapper für meine Windows C# -Formulare Anwendung. Mir ist aufgefallen, dass die meisten ihrer CRUD-Operationen den Klassennamen als Parameter annehmen. Zum Beispiel zwei Tabellen wie folgt:Dapper parametrisiert Update und Einfügen?

"Employee" Table 
     Column Name | Data Type | 
     ------------------------- 
     EmpName  | string | 
     EmpNo  | string | 
     -------------------------- 

Employee.cs 
[Table("Employee")] 
public class Employee 
{ 
    [Key] 
    public string EmpNo {get;set;} 
    public string EmpName {get;set;} 
} 

    "User" Table 
     Column Name | Data Type | 
     ------------------------- 
     UserName  | string | 
     UserNo  | string | 
     -------------------------- 
User.cs 
[Table("User")] 
public class User 
{ 
    [Key] 
    public string UserNo {get;set;} 
    public string UserName {get;set;} 
} 


    eg. var users= connection.Query<User>("select * from User"); 
     var employees = connnection.GetList<Employee>(); 

werden die entsprechenden Aufgaben tun. aber nach meinem Wissen connection.Insert<User>(user); or connection.Update<Employee>(emp); existiert nicht. Bitte korrigieren Sie mich, wenn ich falsch liege, gibt es irgendwelche Arbeit um Update und Einfügen mit dem Dapper wissen, die Klassenart? Ich bin mir bewusst über Query() und Execute(), in der Tat verwende ich diese gerade jetzt. Ist es trotzdem möglich, es so einfach wie GetList(ClassName); zu machen?

+0

Sie können sich die Tag-Informationen http://stackoverflow.com/tags/dapper/info ansehen, die mit [Ausführen von Einfügungen und Aktualisierungen mit Dapper] verknüpft sind (http://stackoverflow.com/questions/5957774/ performing-inserts-and-updates-with-dapper –

+0

Ja, ich bin mir der Query- und Execute-Funktionen bewusst, was ich suche, ist, Insert und Update so einfach wie GetList (ClassName) und Get (class) zu machen. –

+1

@RahulMakwana Sie müssen Ihren eigenen Wrapper schreiben, um das zu tun. Nach dem, was ich verstehe, haben die Leute, die Dapper geschrieben haben, es getan, als ich unten geantwortet habe, um Dinge offen zu lassen. Oftmals muss der Code nur bestimmte Spalten aktualisieren, so dass die Übergabe eines Objekts annehmen würde, dass Sie alle Spalten aktualisieren möchten, was eine große Voraussetzung für Aktualisierungen ist. Wie es derzeit ist, ist es ziemlich genauer Code. –

Antwort

2

Dank Marc GRA. Ich fand es here. Die Open-Source-Entwicklung von Dapper hat eine Implementierung für Insert<ClassName>(obj) und Update<ClassName>(obj).

2

Dapper behandelt die Dinge ein bisschen anders als das, was Sie verlangen. Es gibt keine Insert- oder Update-Methode. Stattdessen wollen Sie es so für Insert tun:

var p = new Product { Name = "Sam", Description = "Developer" }; 
p.Id = cnn.Query<int>(@"insert Products(Name,Description) 
values (@Name,@Description) 
select cast(scope_identity() as int)", p).First(); 

Dies ist direkt von Sam Saffron, https://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper.

Für Updates, werden Sie Code wie diesen wollen:

public bool Update(Employee employee) 
{ 
    string query = "UPDATE EMPLOYEE SET NAME = @Name WHERE Id = @Id"; 
    var count = this.db.Execute(query, employee); 
    return count > 0; 
} 
+1

Oder verwenden Sie 'Execute', wenn Sie die Identität nicht wieder herausbekommen müssen. – juharr

+2

Hinweis: dapper.contrib fügt eine Menge CRUD-Unterstützung hinzu –

Verwandte Themen