2016-06-23 57 views
3

我正在爲我的Windows C#表單應用程序使用Dapper。我注意到他們大多數的CRUD操作都將類名稱作爲參數。 例如兩個表如下:Dapper的參數化更新和插入?

"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>(); 

將執行相應的任務。但根據我所知,connection.Insert<User>(user); or connection.Update<Employee>(emp);不存在。 請糾正我,如果我錯了,是否有任何工作,讓更新和插入與讓枯燥的人知道類的類型? 我深知Query()Execute(),實際上我正在使用這些。無論如何可以使它像GetList(ClassName);一樣簡單嗎?

+0

你可能想看看標籤信息http://stackoverflow.com/tags/dapper/info有鏈接[執行插入和更新與小巧](http://stackoverflow.com/questions/5957774/執行插入和更新與小巧) –

+0

是的,我知道查詢和執行功能,我正在尋找的是使插入和更新像GetList(ClassName)和Get(類)一樣簡單。 –

+1

@RahulMakwana你將需要編寫自己的包裝來做到這一點。根據我的理解,寫Dapper的人是這樣做的,因爲我在下面回答說要讓事情公開化。很多時候,代碼只需要更新特定的列,因此傳遞一個對象會假定您想要更新所有列,這是更新的一個重要假設。就目前而言,它是相當精確的代碼。 –

回答

2

感謝馬克Gravell。我發現它here。 Dapper的開源開發確實有Insert<ClassName>(obj)Update<ClassName>(obj)的實現。

2

Dapper處理的事情與你所要求的有所不同。沒有插入或更新方法。相反,你會想要做這樣的插入:

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(); 

這是直接從薩姆藏紅花,https://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper

更新時,你會想這樣的代碼:

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

或者只是使用'執行',如果你不需要返回身份。 – juharr

+2

注意:dapper.contrib增加了很多CRUD支持 –