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.