Nếu truy vấn chèn của bạn là ANSI SQL hoặc bạn không quan tâm đến việc hỗ trợ cơ sở dữ liệu multipe với codebase của bạn, bạn vẫn có backdoor để tạo ra một nhà cung cấp ADO.NET từ EF và thực hiện một số SQL liệu cuộc gọi
https://stackoverflow.com/a/1579220/98491
tôi sẽ làm một cái gì đó như thế này
private void BulkInsert(IEnumerable<Person> Persons)
{
// use the information in the link to get your connection
DbConnection conn = ...
using (DbCommand cmd = conn.CreateCommand())
{
var sb = new StringBuilder();
sb.Append("INSERT INTO person (firstname, lastname) VALUES ");
var count = 0;
foreach(var person in persons)
{
if (count !=0) sb.Append(",");
sb.Append(GetInsertCommand(person, count++, cmd));
}
if (count > 0)
{
cmd.CommandText = sb.ToString();
cmd.ExecuteNonQuery();
}
}
if (sb.Length > 0)
ExecuteNonQuery(sb.ToString());
}
private string GetInsertCommand(Person person, int count, DbCommand cmd)
{
var firstname = "@firstname" + count.ToString();
var lastname = "@lastname" + count.ToString();
cmd.Parameters.Add(firstname, person.Firstname);
cmd.Parameters.Add(lastname, person.Firstname);
return String.Format("({0},{1})", firstname, lastname);
}
tôi phải thừa nhận tôi đã không kiểm tra nó nhưng điều này phải là một phương pháp nhanh chóng và dơ bẩn để bỏ qua EF đối với một số chèn số lượng lớn cho đến khi chèn hàng loạt là một phần của lõi .
Cập nhật
Chỉ cần một ý tưởng nhanh chóng. Bạn đã thử phương thức ... từ không gian tên Migrations chưa? Có lẽ cái này không chèn số lượng lớn, đã không nhìn vào nó nhưng nó rất đáng để thử:
private void BatchInsert(IEnumerable<Person> persons)
{
context.Persons.AddOrUpdate(persons);
}
Tôi biết phương pháp này có thể được làm chậm nếu bạn xác định một cột chính như AddOrUpdate(p => p.Firstname, persons)
nhưng tôi sẽ đoán mà không xac định nó , mà phải được tất cả chèn (không được bảo đảm)
Nguồn
2013-06-12 15:13:25
Sử dụng SqlBulkCopy API – ErikEJ
thể trùng lặp của [Way nhanh nhất của Chèn trong Entity Framework] (http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework) –
Khuôn khổ thực thể rất chậm cho việc này. Tìm thấy một cách để làm điều đó nhanh hơn nhiều. Về cơ bản bạn chèn hàng loạt vào một bảng tạm thời sau đó đưa ra một hợp nhất từ đó vào bảng chính. Tôi đã giải thích kỹ thuật này trên blog của tôi tại đây: http://www.jarloo.com/c-bulk-upsert-to-sql-server-tutorial/ Mô tả kỹ thuật và hiển thị mã cách thực hiện. – Kelly