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.