Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EF Generic Repository get Id from new inserted generic entity

All my entities has property Id. All my tables in database has auto-generated integer identity Id as primary key.

I have generic method to Create entities.

Is there any way to get entity Id after entity inserted in to database?

   public override int Create<T>(T entity)
    {
        string entitySet = GetEntitySetName<T>();
        _context.AddObject(entitySet, entity);
        _context.SaveChanges();

        return <Id Here>; //TODO Return Id here
    }

In simple(not generic) repository i may just return Entity.Id, but how to get the same behavior in generic repository? I may have base entity class for all entities which contains int property Id but is there any way to get it work without implementing this inheritance?

like image 610
angularrocks.com Avatar asked Aug 23 '10 13:08

angularrocks.com


2 Answers

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 set

db.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.

like image 134
Graham Avatar answered Sep 23 '22 12:09

Graham


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

With EntityObject entities you can read the EntityKey property.

like image 40
Craig Stuntz Avatar answered Sep 24 '22 12:09

Craig Stuntz