2012-01-27 23 views
5

Ésta es la im código utilizando para configurar la base de datos:¿Cómo desactivo Lazy Loading, Entity Framework 4.1 utilizando código de Migraciones de configuración

internal sealed class Configuration : DbMigrationsConfiguration<DataStore> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     SetSqlGenerator("System.Data.SqlServerCe.4.0", new SqlCeModelColumnBugWorkaroundProvider()); 

    } 

    protected override void OnSeed(DbContext context) 
    { 
     context.Configuration.LazyLoadingEnabled = false; 
     new SeedData(context as DataStore); 
    } 

    public static void DoDatabaseInitialisation() 
    { 
     var setting = ConfigurationManager.AppSettings["RequiresDbUpdate"]; 
     var requiresDbUpdate = bool.Parse(string.IsNullOrEmpty(setting) ? "false" : setting); 

     if (! requiresDbUpdate) return; 

     //otherwise create/update the database 
     var dbMigrator = new DbMigrator(new Configuration()); 
     dbMigrator.Update(); 

     ResetDbUpdateRequired("/"); 
    } 

    private static void ResetDbUpdateRequired(string appPath) 
    { 
     var hostName = WebHelper.GetHost(false); 

     if (!hostName.Contains("localhost")) 
      WebHelper.UpdateWebConfigAppSetting("RequiresDbUpdate", "false", appPath); 
    } 

Si alguien sabe cómo hacer esto, por favor hágamelo saber. También probé propiedades no virtuales en las clases modelo, pero esto parece no tener ninguna diferencia.

Respuesta

3

Siempre he usado

context.Configuration.LazyLoadingEnabled = false; 

llamando antes de utilizar los métodos DbContext, un entorno equivalente es la siguiente:

(context as IObjectContextAdapter).ObjectContext.ContextOptions.LazyLoadingEnabled = false; 
+0

Sí, ya probé este método, funciona correctamente sin la primera migración del código. Entonces, creo que tiene algo que ver con eso, ¿por qué no está funcionando ... – woz

1

solución de Max no está lejos de la punta. En realidad me espoleó a buscar en una ubicación diferente o la solución. Parece que puedes estar usando EF Code First, ¿sí? Entonces, en la Inicialización de su contexto, está la anulación de 'OnModelCreated'.

En este método, simplemente llamé y configuré la propiedad y todo se resolvió.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    base.Configuration.LazyLoadingEnabled = false; 
} 

Mi modelo es ahora mucho más apetecible. La carga lenta es genial ... pero no cuando no la quieres. Y cuando comienzas a tener referencias circulares, es simplemente ridículo.

Cuestiones relacionadas