动态加载DbSet到DbContext

时间:2016-08-09 15:00:34

标签: c# entity-framework entity-framework-core

如何动态加载到EF7 DbContext X个类而不在DbContext类中明确写入它们?

例如,我试图像这样避免它:

public class MyDbContextClass : DbContext
{
    public DbSet<Category> categories {get;set;}
    public DbSet<Product> products {get;set;}
    ...
}

因此,动态加载类别和产品可能会很棒(不知道我是否有2或20个类)。

有可能吗?

2 个答案:

答案 0 :(得分:1)

只要dbContext.Set<T>()是模型中的类型,

DbSet<T>就会创建T的实例(即您必须在OnModelCreating中添加实体类型)。

请参阅source code for .Set<T>.

答案 1 :(得分:1)

您应该使用此方法:

  • 所有实体都必须继承自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);
    }