2009-01-02 36 views
6

Tôi đang sử dụng LINQ to SQL để cập nhật cơ sở dữ liệu của mình. Tôi đang chèn rất nhiều bản ghi, và khi tôi gọi SubmitChanges(), LINQ to SQL thực thi một câu lệnh chèn và một câu lệnh chọn cho từng đối tượng. Tôi không thực sự quan tâm để cập nhật các đối tượng của tôi sau khi chúng được chèn vào cơ sở dữ liệu.Dừng LINQ to SQL từ thực hiện các câu lệnh chọn sau khi chèn

Bạn có biết tôi có thể ngăn LINQ to SQL phát hành các câu lệnh chọn sau câu lệnh chèn không? Điều này sẽ làm cho ứng dụng của tôi nhanh hơn nhiều.

Trả lời

0

Tôi không thể nhớ lại cài đặt ngay bây giờ, nhưng trong nhà thiết kế, trên thuộc tính của cột, bạn có một số cài đặt 'làm mới'.

6

Bạn đang tìm kiếm ColumnAttribute.AutoSync. Nếu bạn đang sử dụng nhà thiết kế, hãy kiểm tra từng cột cho thuộc tính Tự động đồng bộ hóa và đặt cột thành Không bao giờ.

Chỉnh sửa: Ok, điều đó không hiệu quả với bạn. Brace mình cho một số bản đồ hackery!

Khi tôi Chèn với một số cột khóa chính tạo tự động, tôi nhận được lệnh SQL này:

INSERT INTO [dbo].[TableName](fieldlist) 
VALUES (@p0, @p1, @p2, @p3, @p4) 

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value] 

Như tôi hiểu yêu cầu của bạn, bạn không muốn điều đó CHỌN

Cố gắng 1: Tôi đã đi đến trường khóa chính và đặt tự động tạo thành sai. Điều này gây ra ngoại lệ Sql "Không thể chèn giá trị rõ ràng cho cột nhận dạng trong bảng 'TableName' khi IDENTITY_INSERT được đặt thành TẮT". Nói cách khác, LINQ đã chỉ định một giá trị cho cột đó.

Cố gắng 2: Tôi đã xóa các cột được tạo tự động từ trình thiết kế. Điều này khiến Linq đưa cho tôi một ngoại lệ hoạt động không hợp lệ: "Không thể thực hiện các thao tác tạo, cập nhật hoặc xóa trên 'Bảng (TableName)' vì nó không có khóa chính."

Cố gắng 3: Tôi đã xóa các cột được tạo tự động từ trình thiết kế, sau đó tôi đánh dấu cột khác là khóa chính. Mặc dù cột này không phải là khóa chính trong cơ sở dữ liệu, DataContext của LINQ sẽ sử dụng nó để theo dõi nhận dạng hàng. Nó phải là duy nhất cho các bản ghi quan sát của một DataContext đã cho.

nỗ lực thứ ba này tạo ra SQL sau (đó là những gì bạn yêu cầu)

INSERT INTO [dbo].[TableName](fieldlist) 
VALUES (@p0, @p1, @p2, @p3, @p4) 
+0

Cảm ơn đề xuất. Tôi đã làm điều đó, nhưng profiler vẫn hiển thị một lựa chọn sau khi cả hai chèn và cập nhật. Tôi không biết tại sao. –

+0

Tôi có hai cột được đánh dấu là AutoGeneratedValue được đặt thành true. Câu lệnh select chọn hai cột sau khi chèn và cập nhật, mặc dù AutoSync được đặt thành false. –

+2

Điều đó có vẻ giống như một lượng công việc lố bịch để làm điều gì đó có thể làm đúng cách lần đầu tiên sử dụng ADO.Net – Jasmine

0

Tôi có vấn đề này với một dự án cùng một lúc. Tôi chỉ đơn giản là sử dụng context.ExecuteCommand ({sql string here.}). Điều này là cho một chèn đã gây ra vấn đề hiệu suất. Sửa chữa dễ dàng nhất, dễ nhìn và duy trì hơn là đào qua mô hình theo ý kiến ​​của tôi.

Các vấn đề liên quan