Определить Entity Framework SetInitializer в web.config - PullRequest
16 голосов
/ 13 марта 2012

В данный момент в разработке у меня есть следующий код в файле Global.asax.cs, который вызывает Entity Framework (v4.1) SetInitializer с моим SeedSampleData методом.Это все работает отлично.

Однако я хотел бы сохранить параметр «стратегии» SetInitializer с помощью параметра web.config, чтобы я мог создать сценарий развертывания, который автоматически установит для него значение new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>() вместо моего начального метода во время развертывания в рабочей среде.,

Причина, по которой вы хотите перенести это в web.config, заключается в том, что при развертывании нового развертывания на производственном сервере я хочу убедиться, что случайно не оставил инициализатор инициализации в коде.

protected void Application_Start()
{
  //TODO: Figure out how to move the following lines to web.config and have a deployment script modify it when going to production.

  //This line is for production
  //System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>());

  //This line is for development
  System.Data.Entity.Database.SetInitializer(new Domain.Concrete.SeedSampleData());

  //... Remainder of Application_Start calls here...
}

Ответы [ 2 ]

19 голосов
/ 13 марта 2012

Если вы обновитесь до EF 4.3 (что в любом случае является хорошей идеей), то вы можете использовать что-то подобное в своей веб-конфигурации:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <entityFramework>
    <contexts>
      <context type=" Blogging.BlogContext, MyAssembly">
        <databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" />
      </context>
    </contexts>
  </entityFramework>
</configuration>

Роуэн подробно об этом написал здесь: http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx

Если вы действительно хотите продолжать использовать 4.1, то вместо этого вы можете использовать более старый синтаксис.Я написал об этом здесь: http://blog.oneunicorn.com/2011/03/31/configuring-database-initializers-in-a-config-file/

4 голосов
/ 13 марта 2012

Если я правильно понимаю, ваш SeedSampleData инициализатор используется только для целей отладки?

Я не знаю, есть ли параметр config для управления этим, но вы можете использовать директивы препроцессора:

#if DEBUG
System.Data.Entity.Database.SetInitializer(new Domain.Concrete.SeedSampleData());
#else
System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>();
#endif

(при условии, конечно, что вы не развертываете отладочные сборки в рабочей среде ...)

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