Tôi đã xuất bản một gói nuget (SqlBulkTools) để giải quyết vấn đề này.
Đây là một ví dụ về mã sẽ đạt được tăng cường hàng loạt.
var bulk = new BulkOperations();
var books = GetBooks();
using (TransactionScope trans = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager
.ConnectionStrings["SqlBulkToolsTest"].ConnectionString))
{
bulk.Setup<Book>()
.ForCollection(books)
.WithTable("Books")
.AddAllColumns()
.BulkInsertOrUpdate()
.MatchTargetOn(x => x.ISBN)
.Commit(conn);
}
trans.Complete();
}
Đối với các bảng rất lớn, có các tùy chọn để thêm khóa bảng và tạm thời vô hiệu hóa các chỉ mục không phân cụm. Xem Tài liệu SqlBulkTools để biết thêm ví dụ.