Find a specified generic DbSet in a DbContext dynamically when I have an entity

c#, code-first, dbset, entity-framework, generics

Solution

`DbContext` has a method called `Set`, that you can use to get a non-generic `DbSet`, such as:

var someDbSet = this.Set(typeof(SomeEntity));

So in your case:

foreach (BaseEntity entity in list)
{
      cntx.Set(entity.GetType()).Add(entity);         
}

Problem

I have following classes and `DbContext`: ``` public class Order : BaseEntity { public Number {get; set;} } public class Product : BaseEntity; { public Name {get; set;} } public class Context : DbContext { .... public DbSet<Order> Orders { set; get; } public DbSet<Product> Products { set; get; } .... } ``` I have a list of objects that want to add to my context, too, but I don't know how can I find appropriate generic `DbSet` according each entity type dynamically. ``` IList<BaseEntity> list = new List<BaseEntity>(); Order o1 = new Order(); o1.Numner = "Ord1"; list.Add(o1); Product p1 = new Product(); p1.Name = "Pencil"; list.Add(p1); Context cntx = new Context(); foreach (BaseEntity entity in list) { cntx.Set<?>().Add(entity); } ``` How can I do that?

Original source

Related problems