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)
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. –
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. –
Đ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