2013-06-06 40 views
18

Tôi đang phát triển một ứng dụng ASP.net bằng cách sử dụng Khuôn khổ thực thể. Tôi đang sử dụng DetailsView để chèn dữ liệu vào cơ sở dữ liệu. Có một bảng là Client và khóa chính của nó là client_id. client_id được tự động tạo bởi cơ sở dữ liệu. Tôi cần tự động tạo client_id sau khi chèn bản ghi vào bảng Client và gán nó vào trường ẩn để sử dụng trong tương lai.Nhận ID bản ghi trong Khuôn khổ thực thể sau khi chèn

Tôi đã tìm kiếm về điều này và tôi đã tìm thấy rất nhiều giải pháp. Nhưng tôi không biết cách sử dụng chúng vì tôi mới tham gia asp.net. Tôi thấy rằng Entity Framework tự động điền các đối tượng nghiệp vụ với các giá trị do db tạo ra sau khi gọi SaveChanges(). Câu hỏi của tôi là nơi tôi nên gọi điều này trong lớp học một phần của tôi? Sự kiện này là gì?

Tôi đang sử dụng DetailsView với EntityDataSource và ràng buộc EntityDataSource trực tiếp với Mô hình thực thể, vì vậy tôi không tạo đối tượng để chèn dữ liệu.

+0

Có thể trùng lặp [Làm cách nào tôi có thể lấy Id của thực thể được chèn trong khuôn khổ Pháp nhân?] (Http://stackoverflow.com/questions/5212751/how-can-i- get-id-of-chèn-thực thể-trong-thực thể-khuôn khổ) –

+1

@ Michael Freidgeim nó không phải là một bản sao bởi vì Bishan muốn nó với EntityDataSource và câu hỏi và câu trả lời không liên quan đến EntityDataSource. –

Trả lời

3

Đây là những gì tôi đang tìm kiếm.

trong phần lớp

protected void clientDataSource_OnInserted(object sender, EntityDataSourceChangedEventArgs e) 
{ 

    int newPrimaryKey = ((Client)e.Entity).ClientId; 
    Debug.WriteLine(" Client ID is " + newPrimaryKey); 

} 

và thêm vào dưới dòng trong EntityDataSource trong trang aspx.

OnInserted="clientDataSource_OnInserted" 
+1

Cảm ơn bạn! Đó chính xác là những gì tôi đang tìm kiếm! –

5

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.

Giống như MyObject.Id sẽ cung cấp cho bạn Id mới

+0

Tôi đang sử dụng DetailsView với EntityDataSource và ràng buộc EntityDataSource trực tiếp với Mô hình thực thể. vì vậy tôi không tạo đối tượng để chèn dữ liệu. – Bishan

37

Tiếp nối cuộc gọi đến _dbContext.SaveChanges(), đơn vị sẽ tự động được cập nhật với giá trị lĩnh vực nhận dạng mới của nó.

Các mã sau đây giả định tên chứa thực thể Entity Framework của bạn là MyEntities, và bảng Khách hàng của cơ sở dữ liệu của bạn có ít nhất là hai lĩnh vực sau:

client_id int identity 
client_name varchar(25) 

Mã của bạn có thể trông như thế này:

// Establish DbContext 
private readonly MyEntities _dbContext = new MyEntities(); 

// Create new client table entity and initialize its properties 
var clientEntity = new Client { client_name="MyCo" }; 

// Add it to the ORM's collection of Client entities 
_dbContext.Clients.Add(clientEntity); 

// Save the new entity to the database 
_dbContext.SaveChanges(); 

// Return the identity field from the existing entity, 
// which was updated when the record was saved to the database 
return clientEntity.client_id; 
+0

Tôi đang sử dụng 'DetailsView' với' EntityDataSource' và ràng buộc 'EntityDataSource' trực tiếp với Entity Model. vì vậy tôi không tạo đối tượng để chèn dữ liệu. – Bishan

0

Cảm ơn, tôi đã dành 3 ngày tìm kiếm và tìm kiếm với kết quả phức tạp nhưng giải pháp này thật tuyệt vời! Đây là trong vb.net:

Protected Sub dvArticulos_ItemInserted(sender As Object, e As EntityDataSourceChangedEventArgs) Handles EntityDataSource1.Inserted 
    Dim last_Serie As Long = DirectCast(e.Entity, articulos).Serie 
    Session("Articulo") = last_Serie 
End Sub 
Các vấn đề liên quan