如何禁用懒惰加载,实体框架4.1使用代码迁移配置

本文关键字:代码 配置 迁移 框架 何禁用 加载 实体 | 更新日期: 2023-09-27 18:21:40

这是我用来配置数据库的代码:

 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);
    }

如果有人知道怎么做,请告诉我。我也在模型类上尝试过非虚拟属性,但这似乎没有任何区别。

如何禁用懒惰加载,实体框架4.1使用代码迁移配置

我一直使用

context.Configuration.LazyLoadingEnabled = false;

在使用DbContext方法之前调用它,等效的设置是:

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

Max的解决方案离要点不远。事实上促使我去另一个地方寻找解决方案。看起来你可能在使用EF Code First,是吗?因此,在上下文的初始化中,存在"OnModelCreated"的覆盖。

在这个方法中,我只需调用并设置属性,就可以解决所有问题。

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

我的模特现在更讨人喜欢了。懒惰的加载很棒。。。但当你不想要的时候就不行了。当你开始有循环引用的时候,这简直太荒谬了。