Emita DbContext.OnModelCreating em cada criação de contexto

Uso primeiro o código da estrutura da entidade para trabalhar com meu banco de dados. Eu tenho várias tabelas com nomes diferentes, mas a mesma estrutura, e essas tabelas aparecem dinamicamente no banco de dados. Como eu poderia mapear o EntityFramework para uma dessas tabelas em tempo de execução e usar dados exatamente como eu trabalho sobre as entidades do DbContext?

O que eu fiz para fazê-lo funcionar:

Por exemplo, minha classe que descreve a estrutura da tabela criada dinamicamente éSetElement.

Aqui está o meu contexto:

public class DataContext : DbContext
{
    public DataContext()
        : base("RepositoryConnectionString") { }

    string setElementsTableId; // the name of table that need to be dynamicly mapped to 

    // Enforce model recreating
    public DataContext(string setElementsTableId)
        : this()
    {
        this.setElementsTableId = setElementsTableId;
    }


    /* some other entities */

    public DbSet<Entities.SetElement> SetElements { get; set; } // dynamicly mapped entity


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        /* come configurations */

        if (!string.IsNullOrEmpty(setElementsTableId))
        {
            modelBuilder.Entity<Entities.SetElement>().Map(x => x.ToTable(setElementsTableId)); // map SetElements property to dynamicly created table
        }
    }
}

Como eu uso isso:

public static void AddSetElements(ICollection<SetElement> setElements, string tableId)
    {
     using (ctx = new DataContext(tableId)) // configere DataContext to map tableId table for entity SetElements
       try
       {
           var num = ctx.SetElements.Count();
           ctx.SetElements.AddRange(setElements);
           ctx.SaveChanges();
       }
       catch (Exception e)
       {
       }
 }

Também tenho alguns métodos para obter, atualizar e remover dados de tabelas criadas dinamicamente que são iguais aAddSetElements.

Tudo funciona como eu gostaria, mas apenas seAddSetElements executa primeiro, porque no primeiro datacontext, criaDbContext.OnModelCreating executa e configura todos os mapeamentos. Mas a criação da próxima instância não chamaDbContext.OnModelCreating.

Então, minha pergunta é: como ligarDbContext.OnModelCreating sempre que criar uma instância deDataContext então eu usoDataContext(string setElementsTableId) para criá-lo?

Eu sei, minha pergunta é semelhante ao 'mapeamento dinâmico de tabelas no EF', mas não encontrei nada nos resultados.

A propósito. Se você conhece outra maneira de resolver meu problema, seja bem-vindo.

questionAnswers(2)

yourAnswerToTheQuestion