Get Record ID in Entity Framework after insert

Bishan picture Bishan · Jun 6, 2013 · Viewed 65.9k times · Source

I'm developing an ASP.net application using Entity Framework. I'm using DetailsView to insert data into database. There is a table as Client and its primary key is client_id. client_id is auto generated by database. I need to get auto generated client_id after inserting a record into Client table and assign it to a hidden field for future use.

I searched about this and I found lot of solutions. But I don't know how to use them since I'm new to asp.net. I found that Entity Framework automatically populates business objects with the db-generated values after call SaveChanges(). My question is where should I call this in my partial class ? What is the event ?

I'm using DetailsView with EntityDataSource and binding EntityDataSource directly with Entity Model, so I'm not creating objects to insert data.

Answer

STLDev picture STLDev · Jun 6, 2013

Following the call to _dbContext.SaveChanges(), the entity will automatically be updated with its new identity field value.

The following code assumes your Entity Framework entity container name is MyEntities, and your database's Client table has at least the two following fields:

client_id   int identity
client_name varchar(25)

Your code might look something like this:

// 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;