2011-06-24 28 views
32

Tôi đang sử dụng Khuôn khổ thực thể để chèn hàng vào cơ sở dữ liệu sql của tôi. Nếu tôi đã được sử dụng một thủ tục lưu trữ sau đó tôi sẽ có thể trả lại khóa chính cho bản ghi mà tôi đã chèn vào.Entity Framework 4 lấy ID khóa chính cho bản ghi được chèn

Tôi có thể trả lại PK cho bản ghi cuối cùng được chèn vào bằng cách sử dụng Khung thực thể không?

Trả lời

36

Sau khi bạn đã chèn đối tượng, nó phải được cập nhật để thuộc tính ánh xạ tới khóa chính trong cơ sở dữ liệu có giá trị PK mới.

+2

Điều đó có xảy ra trên Thêm hoặc tôi có phải lưu các thay đổi đối với ngữ cảnh trước khi tôi nhận được ID có thể sử dụng không? –

+4

Những thay đổi cần phải được cam kết với cơ sở dữ liệu, thêm chỉ cần đặt nó trong ngữ cảnh, cho đến khi bạn nhấn cơ sở dữ liệu giá trị PK sẽ, không được tạo ra. –

+0

Lưu ý rằng điều này không phải lúc nào cũng đáng tin cậy hoàn toàn do lỗi SCOPE_IDENTITY. – DFTR

26

Có tất nhiên bạn có thể làm điều này. Xem ví dụ:

int id = 0; 

using (PC2Entities objectContext = new PC2Entities()) 
{ 
    objectContext.ClientContacts.AddObject(clientContact); 
    objectContext.SaveChanges(); 
    id = clientContact.Id; 

    transaction.Complete(); 
} 

id là PK.

0

Nếu bạn vẫn không nhận được ID sau khi chèn, sau đó thêm thuộc tính này vào thuộc tính khóa chính.

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public string ID { get; set; } 

Tôi phải làm điều này, không biết tại sao, có thể vì tôi đang sử dụng khuôn khổ oracle và thực thể không hài lòng về điều đó.

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