2011-04-07 24 views
6

¿Alguien podría ofrecer algún consejo sobre si es una buena práctica tener un solo contexto o múltiples contextos?EF 4.1 Code First: ¿contexto único o contextos múltiples?

Por ejemplo, ¿Debería haber un único contexto de la siguiente manera:

public class MyContext 
     : DbContext 
    { 
     public DbSet<Company> Companies { get; set; } 

     public DbSet<Country> Countries { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Configurations.Add(new CountryConfiguration()); 
      modelBuilder.Configurations.Add(new CompanyConfiguration()); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 

O habría que ser mejor crear un contexto distinto para las empresas y países? Entonces, ConpanyContext y CountryContext exponen una sola propiedad DbSet.

Puede ser solo una elección personal, pero nuestra base de datos va a consistir en cientos de entidades. Por lo tanto, me gustaría tener este derecho para empezar.

Muchas gracias,

Paul.

Respuesta

6

Una simple regla de oro: un esquema/dominio, un contexto.

+0

Me gustaría hacerlo de esta manera si el rendimiento es bueno. Me preocupa un poco lo que será el rendimiento al crear una instancia del contexto cuando tiene que tratar con más de 100 clases de configuración en OnModelCreating. Esto se convierte en un problema mayor al usar esto en un servicio WCF mediante el cual creará una nueva instancia en cada llamada de servicio. – P2l

+0

@Paul: OnModelCreating se llama ** UNA VEZ **, no cada vez que crea una instancia. –

+0

Acabo de probar esto y tienes razón. Un contexto es entonces. – P2l

2

Si es posible, intente dividirlos a lo largo de líneas significativas.

100 entidades en un contexto pueden parecer malas, pero piense en su alternativa, ¿100 contextos diferentes?

Entonces habría que hacer cosas como

using(CompanyContext cc = new CompanyContext) 
{ 
} 

using (CountryContext cc = new CountryContext) 
{ 
} 

Si necesitabas para consultar varias tablas que le han anidado contextos y sería poner feo. Se podría comenzar a tener cosas como

using(CompanyContext comp = new CompanyContext) 
    { 
     using (CountryContext country = new CountryContext) 
     { 
     } 
    } 

No me puedo imaginar el rendimiento sería mejorado pasando de esa manera, pero estoy seguro de mantenimiento sería un dolor.

Cuestiones relacionadas