C# 将DbSet动态加载到DbContext
如何动态地将X个类加载到EF7C# 将DbSet动态加载到DbContext,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,如何动态地将X个类加载到EF7DbContext中,而不显式地将它们写入DbContext类中 例如,我试图这样避免它: public class MyDbContextClass : DbContext { public DbSet<Category> categories {get;set;} public DbSet<Product> products {get;set;} ... } 公共类MyDbContextClass:DbConte
DbContext
中,而不显式地将它们写入DbContext
类中
例如,我试图这样避免它:
public class MyDbContextClass : DbContext
{
public DbSet<Category> categories {get;set;}
public DbSet<Product> products {get;set;}
...
}
公共类MyDbContextClass:DbContext
{
公共数据库集类别{get;set;}
公共数据库集产品{get;set;}
...
}
所以动态加载类别和产品(不知道我是否有2个或20个类)可能会很棒
有可能吗?dbContext.Set()
创建DbSet
的实例,只要T
是模型中的类型(即,您必须在OnModelCreating
中添加实体类型)
请参见您应该使用此方法:
- 所有实体都必须从BaseType继承
public static void RegisterAllEntities<BaseType>(this ModelBuilder modelBuilder, params Assembly[] assemblies) { var types = assemblies.SelectMany(a => a.GetExportedTypes()) .Where(c => c.IsClass && !c.IsAbstract && c.IsPublic && typeof(BaseType).IsAssignableFrom(c)); foreach (var type in types) modelBuilder.Entity(type); }
公共静态无效注册表属性(此ModelBuilder ModelBuilder,参数程序集[]程序集) { var types=assemblies.SelectMany(a=>a.GetExportedTypes()) 其中(c=>c.IsClass&!c.isastract&&c.IsPublic&&typeof(BaseType).IsAssignableFrom(c)); foreach(类型中的变量类型) modelBuilder.Entity(类型); }
context.Set()
?即使可能,这也不是一个好主意。尽管这样做确实可以。。。。我真的怀疑有人会想要这个。。。因为它没有任何好处,但我知道你在那里做了什么;-)