使用Dapper執行插入和更新

c# dapper orm

我對使用Dapper很感興趣 - 但據我所知它只支持Query和Execute。我沒有看到Dapper包含一種插入和更新對象的方法。

鑑於我們的項目(大多數項目?)需要進行插入和更新,將插入和更新與dapper一起進行的最佳做法是什麼?

我們最好不要求助於參數構建的ADO.NET方法等。

我現在能想出的最佳答案是使用LinqToSQL進行插入和更新。有更好的答案嗎?

一般承認的答案

我們正在尋找建立一些幫助者,仍然決定API,如果這是核心與否。有關進度,請參閱: https//code.google.com/archive/p/dapper-dot-net/issues/6

與此同時,您可以執行以下操作

val = "my value";
cnn.Execute("insert into Table(val) values (@val)", new {val});

cnn.Execute("update Table set val = @val where Id = @id", new {val, id = 1});

諸如此類

另見我的博客文章: 那個惱人的INSERT問題

更新

正如評論中所指出的, Dapper.Contrib項目中現在有幾種擴展可以使用這些IDbConnection擴展方法的形式:

T Get<T>(id);
IEnumerable<T> GetAll<T>();
int Insert<T>(T obj);
int Insert<T>(Enumerable<T> list);
bool Update<T>(T obj);
bool Update<T>(Enumerable<T> list);
bool Delete<T>(T obj);
bool Delete<T>(Enumerable<T> list);
bool DeleteAll<T>();

熱門答案

使用Dapper執行CRUD操作是一項簡單的任務。我已經提到了下面的示例,可以幫助您進行CRUD操作。

C RUD代碼:

方法#1:當您插入來自不同實體的值時,將使用此方法。

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string insertQuery = @"INSERT INTO [dbo].[Customer]([FirstName], [LastName], [State], [City], [IsActive], [CreatedOn]) VALUES (@FirstName, @LastName, @State, @City, @IsActive, @CreatedOn)";

    var result = db.Execute(insertQuery, new
    {
        customerModel.FirstName,
        customerModel.LastName,
        StateModel.State,
        CityModel.City,
        isActive,
        CreatedOn = DateTime.Now
    });
}

方法#2:當您的實體屬性與SQL列具有相同的名稱時,將使用此方法。因此,Dapper是一個ORM映射具有匹配SQL列的實體屬性。

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string insertQuery = @"INSERT INTO [dbo].[Customer]([FirstName], [LastName], [State], [City], [IsActive], [CreatedOn]) VALUES (@FirstName, @LastName, @State, @City, @IsActive, @CreatedOn)";

    var result = db.Execute(insertQuery, customerViewModel);
}

C R UD的代碼:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string selectQuery = @"SELECT * FROM [dbo].[Customer] WHERE FirstName = @FirstName";

    var result = db.Query(selectQuery, new
    {
        customerModel.FirstName
    });
}

CR U D代碼:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string updateQuery = @"UPDATE [dbo].[Customer] SET IsActive = @IsActive WHERE FirstName = @FirstName AND LastName = @LastName";

    var result = db.Execute(updateQuery, new
    {
        isActive,
        customerModel.FirstName,
        customerModel.LastName
    });
}

CRU D代碼:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string deleteQuery = @"DELETE FROM [dbo].[Customer] WHERE FirstName = @FirstName AND LastName = @LastName";

    var result = db.Execute(deleteQuery, new
    {
        customerModel.FirstName,
        customerModel.LastName
    });
}


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因