无法将类型为'System.Data.Entity.DbSet`1 [ModelName]'的对象转换为类型为'System.Data.Entity.DbSet'

Akl*_*kli 1 c# reflection entity-framework

我的实体框架上下文:

public class MyContext : DbContext
{
    public DbSet<Company> Companies { get; set; }
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<Event> Events { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

我添加对象的方法:

public void AddObject(DbContext context, Type t, object object_to_add)
{      
     PropertyInfo context_property = 
            context.GetType().GetProperties()
           .Where(p => typeof(IEnumerable).IsAssignableFrom(p.PropertyType)
                       && p.PropertyType.GenericTypeArguments.Any()
                       && p.PropertyType.GenericTypeArguments.First() == t)
           .Single();

     DbSet db_set = (DbSet)context_property.GetMethod.Invoke(context, null);

     db_set.Add(object_to_add);
}
Run Code Online (Sandbox Code Playgroud)

但是,代码崩溃当我尝试投了DbSet<>DbSet

我使用反射是因为我收到映射到现有模型的DTO对象(也通过反射),我不想为每个新模型编写add方法(我喜欢40,并且列表呈指数增长)

块引用

有什么办法吗?

oct*_*ccl 5

我认为如果创建通用方法会更容易:

public void AddObject<T>(DbContext context,  T object_to_add)
{
   context.Set<T>().Add(object_to_add);
}
Run Code Online (Sandbox Code Playgroud)

可以使用Set<TEntity>上面显示的方法。