2009-07-02 47 views
5

Tôi đã nhận thấy một hành vi lạ trong Dịch vụ nhập của tôi hôm nay khi tôi cố gắng nhập nhiều bản ghi dữ liệu.ChènAllOnSubmit chỉ chèn bản ghi dữ liệu đầu tiên

Khi tôi làm điều đó như thế này, tất cả dữ liệu hồ sơ được nhập khẩu và giá trị tự động tăng lên là đúng (see screenshot):

public void Create(List<Property> properties) 
{ 
    foreach (Property prop in properties) { 
     dbc.Property.InsertOnSubmit(prop); 
     dbc.SubmitChanges(); 
    } 
} 

Khi tôi thử nó như thế này, chỉ có get bản ghi dữ liệu đầu tiên là một đúng giá trị tự động tăng lên (see screenshot):

foreach (Property prop in properties) { 
    dbc.Property.InsertOnSubmit(prop); 
} 
dbc.SubmitChanges(); 

Cùng ở đây:

dbc.Property.InsertAllOnSubmit(properties); 
dbc.SubmitChanges(); 

Có ai có ý tưởng tại sao nó như thế không? Tất cả ba biến thể nên nhập tất cả các bản ghi dữ liệu theo sự hiểu biết của tôi, nhưng các giá trị tăng tự động bị thiếu cho biết nó không phải như vậy.

[EDIT] Đã thêm hai ảnh chụp màn hình.

+0

Cũng giống như một lưu ý phụ, bạn có chắc đó là dbc.Property chứ không phải dbc.Properties? LINQ to SQL thường đa dạng hóa tên bộ sưu tập ... – BFree

+0

Vâng, đó là "Thuộc tính". Tôi tự đặt tên cho các bảng, chúng không được tạo tự động hoặc giống như thế. Ngoài ra, nếu nó được gọi là "Properties", thì ví dụ đầu tiên không nên hoạt động, phải không? –

+0

Dường như mọi người đồng ý một vấn đề, nhưng không ai +1? Tôi sẽ bắt đầu. Điều này nghe có vẻ như nó có thể là một lỗi đối với tôi. – MattH

Trả lời

6

tôi đã cùng một vấn đề và nó bật ra vấn đề này là do Equals trọng trên lớp được ánh xạ. Phương thức My Equals chỉ so sánh trường khóa chính là trường nhận dạng. Tất nhiên khi các đối tượng là mới, tất cả các danh tính là 0. Vì vậy, khi InsertAllOnSubmit được gọi, nó nghĩ rằng tất cả các đối tượng mới là như nhau và về cơ bản bỏ qua tất cả nhưng một trong những đầu tiên.

2

Không khá chắc chắn lý do tại sao sự thay đổi thứ 2 không hoạt động, tuy nhiên, nên không phải là người cuối cùng là:

dbc.Property.InsertallOnSubmit(properties); 
dbc.SubmitChanges(); 

Sửa

Đối với loop thử thứ hai:

foreach (Property prop in properties) 
{ 
    var newProp = new Property(); 
    newProp = prop; 
    dbc.Property.InsertOnSubmit(newProp); 
} 
dbc.SubmitChanges(); 

Để có giải pháp cuối cùng, hãy thử:

dbc.Property.InsertAllOnSubmit(properties.ToList()); 
dbc.SubmitChanges(); 
+0

Vâng, tất nhiên rồi. Sao chép và dán lỗi trên ví dụ cuối cùng :) –

+0

Bạn có gặp bất kỳ lỗi nào không? – James

+0

Không có lỗi. Tôi đã thêm hai ảnh chụp màn hình vào bài đăng gốc của mình. Như bạn có thể thấy, với phương pháp đầu tiên, tất cả các thuộc tính nhận được ID (các số trong ngoặc vuông []). Trên ảnh chụp màn hình thứ hai, chỉ thuộc tính đầu tiên nhận được một ID. Tôi hoàn toàn không biết có gì sai vì mã được cung cấp là thứ duy nhất khác nhau trong cả hai ảnh chụp màn hình! –

1

Tôi đã gặp sự cố này vài phút trước.

Vấn đề của tôi là danh sách tôi đã gửi đến InsertAllOnSubmit<mappedClass>() có đầy đủ các đối tượng có nguồn gốc từ một trường hợp đơn lẻ là mappedClass. Tôi đã sửa đổi các thành viên tùy thuộc vào cá thể của mô hình khung nhìn mà tôi muốn thêm vào cơ sở dữ liệu và sau đó thêm lại cá thể vào danh sách.

Có vẻ như một lỗi người mới nhưng nó có thể là một cái gì đó để kiểm tra nếu có ai vẫn còn có vấn đề này!

0

Chỉ cần sử dụng một giải pháp hoàn hảo này.
Như, Chúng tôi có một thực thể mới như "TestTable".
Khởi tạo đối tượng này bên trong vòng lặp for như

TestTable objTable = new TestTable(); 

Và thêm các mặt hàng thực thể cũng như trong đối tượng danh sách Danh sách <TestTable> trong vòng lặp for.
Và di chuyển InsertAllOnSubmit() ngoài vòng lặp và giờ nó sẽ hoạt động.

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