I’m back. After a few weeks when I was blocked with personal projects, I’m back on the field, ready to write technical content.
Today I’ll start with something lights that can make our day more beautiful.
How we can write a generic method to get an entity from database using Entity Framework?
Let’s assume that we have different types of entities and we would like to obtain a specific entity using a generic method. Each entity can have the primary key field called in different ways. Also the type of the field can be different (one can be string, another one int and so on).
For this cases we should use Find method. This method accept as input parameters a collections of objects that represents the keys of the entity. Using this method we can get entities from EF in a generic way.
For compound keys, you need to specify the keys in the same order you specified them when you mapped the entity in EF.
Why a list of keys and not only one input parameter?
Well, we can have entities that has a compound key (a key formed from more than one field). For this cases we need to be able to specify the list of keys.
How to get a DbSet based on entity type?
When we need to get a specific DbSet based on the entity type we can use the Set method of DbContext. This methods returns the DbSet for specific entity.
FooDbContext fooContext = new FooDbContext(); // Get DbSet from DbContext DbSet<Foo> fooSet = fooContext.Set<Foo>(); // Foo with id=2 Foo foo = fooSet.Find(2); // Get entity with a compound key where key is ("BMW","M3") DbSet<Car> carSet = fooContext.Set<Car>(); Car bmwM3 = carSet.Find("BMW",M3");