EF Generic Repository get Id from new inserted generic entity EF Generic Repository get Id from new inserted generic entity asp.net asp.net

EF Generic Repository get Id from new inserted generic entity


This can actually be dead simple;

// Project is is object/table, no POCO here.var newProj = new Project();newProj.Name = "Blah project";var db = new AppDataContextname();db.Projects.AddObject(newProj);// at this point, newProj.ID is NOT setdb.SaveChanges(); // record is added to db.// now, the ID property of the Project object is set!!!// if the last ID in that table is '25', and you have auto-increment,// then the object's ID property will now be 26!Console.WriteLine(newProj.ID); // will output "26"

Racked my brain on how to get the ID back for a long time until I realized that the above code works. Works in Linq-To-SQL and EF4.


With POCO entities, you'd have to use an interface, reflection, or dynamic.

With EntityObject entities you can read the EntityKey property.


The solution:

 public override TR Create<T, TR>(T entity)    {        string entitySet = GetEntitySetName<T>();        _context.AddObject(entitySet, entity);        _context.SaveChanges();        //Returns primaryKey value        return (TR)context.CreateEntityKey(entitySet, entity).EntityKeyValues[0].Value;                           }

Where T: entity type, TR: entity PK type.