Как отключить отложенную загрузку, Entity Framework 4.1 с использованием конфигурации миграции кода - PullRequest
5 голосов
/ 27 января 2012

Это код, который я использую для настройки базы данных:

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

Если кто-нибудь знает, как это сделать, пожалуйста, дайте мне знать.Я также пробовал не виртуальные свойства на модельных классах, но это, похоже, не имеет никакого значения.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Я всегда использовал

context.Configuration.LazyLoadingEnabled = false;

, вызывая его перед использованием методов DbContext, эквивалентная настройка такова:

(context as IObjectContextAdapter).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
1 голос
/ 25 марта 2013

Решение Макса не далеко от сути. На самом деле подтолкнул меня посмотреть в другом месте или решение. Похоже, вы можете использовать EF Code First, да? Итак, в Инициализации вашего контекста есть переопределение «OnModelCreated».

В этом методе я просто вызвал и установил свойство, и все было решено.

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

Моя модель стала намного приятнее. Ленивая загрузка - это здорово ... но не тогда, когда ты этого не хочешь. И когда у вас появляются циклические ссылки, это просто смешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...