2011-12-08 21 views
35

Có cách nào tiến thẳng về việc truy xuất khóa chính được tạo tự động DB khi thêm bản ghi qua Entity Framework 4.1 không?Lấy khóa nhận dạng tự động sau khi chèn qua EF

Ví dụ:

dbcontext.Entity_Tables.Add(new Entity_Table { item1 = val1, item2 = val2 }); 
dbcontext.SaveChanges(); 
newPK = ???; 

SQL tương đương sẽ là:

newPK = executeOnDB("INSERT INTO Entity_Table (item1, item2) VALUES (val1, val2);SELECT @@Indentity";); 

BTW Tôi đang sử dụng MySQL nhưng SQL sẽ là tương tự như trên MSSQL

+5

Tôi chỉ muốn chỉ ra rằng 'SELECT @@ Identity' KHÔNG phải là cách tốt để lấy id được chèn vào cuối cùng. Bạn nên sử dụng 'SCOPE_IDENTITY()' – Icarus

+0

Cảm ơn Icarus. Tôi chưa bao giờ nhận ra điều đó. Đoán tôi nên cập nhật một số ứng dụng cũ của tôi quá! – chrisg229

+0

Bản sao có thể có của [Làm cách nào tôi có thể nhận được Id của thực thể được chèn trong khung Entity?] (Http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity -framework) –

Trả lời

73

Tôi tin rằng EF nên cập nhật đối tượng đối tượng của bạn với danh tính:

var entity = new Entity_Table { item1 = val1, item2 = val2 }; 
dbcontext.Entity_Tables.Add(entity); 
dbcontext.SaveChanges(); 
int newPK = entity.ID; 
+3

Tôi vừa xác nhận đó là chính xác những gì nó làm. Rất cám ơn ob! – chrisg229

+2

Khi tôi chèn, có một kích hoạt InsertBefore trên bảng có thêm các thuộc tính riêng của nó, và vì vậy, ngay cả khi lưu thay đổi đang thực thi, chèn đó được thay thế bằng chèn trước, và như vậy, ID được trả lại cho tôi là 0 và giá trị thực tế của ID là một cái gì đó khác. Trong trường hợp đó làm thế nào để tôi có được giá trị? – Mahesh

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