Dapper批量更新


本次示例項目使用Dappe1.50.5和Dapper.Contrib1.50.5
數據庫執行的腳本檢測工具是SQL Server Prifiler

1.使用Where In 實現批量更新

1.1代碼如下:

/// <summary>
/// 把多個用戶的isvalid置為0
/// </summary>
public void UpdateUsersByWhereInTest()
{
    var sql = @"UPDATE dbo.[user] SET isvalid=0 WHERE UserId IN @UserId ;";
    var userIdArr = new int[] { 3013, 3012, 3011, 3010 };
    var res = Repository.Execute(sql, new { UserId = userIdArr });
    Assert.True(res > 0);
}

1.2檢測到數據庫執行的腳本

exec sp_executesql N'UPDATE dbo.[user] 
					 SET isvalid=0 
					 WHERE UserId IN (@UserId1,@UserId2,@UserId3,@UserId4) ;',
					 N'@UserId1 int,@UserId2 int,
					   @UserId3 int,@UserId4 int',
				       @UserId1=3013,@UserId2=3012,
					   @UserId3=3011,@UserId4=3010

2.更新多條數據,每一條數據更新的內容可不相同

2.1代碼如下

/// <summary>
/// 分別把用戶Id是3013的用戶名稱更新為張三,用戶Id是3012的用戶名稱更新為李四
/// </summary>
[Fact]
public void UpdateUsersTest()
{
    var sql = @"UPDATE dbo.[user] SET UserName=@UserName WHERE UserId = @UserId ;";
    var users = new List<User> {
        new User { UserId=3013, UserName = "張三", },
        new User { UserId =3012, UserName = "李四",  },
   };
    var res = Repository.Execute(sql,users);
    Assert.True(res > 0);
}

2.2檢測到數據庫執行的腳本

生成兩條Update腳本執行

exec sp_executesql N'UPDATE dbo.[user] 
					 SET UserName=@UserName 
					 WHERE UserId = @UserId ;',
					 N'@UserId int,@UserName nvarchar(4000)',
					 @UserId=3013,@UserName=N'張三'

exec sp_executesql N'UPDATE dbo.[user] 
					 SET UserName=@UserName 
					 WHERE UserId = @UserId ;',
					 N'@UserId int,@UserName nvarchar(4000)',
					 @UserId=3012,@UserName=N'李四'

示例代碼下載地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM