2017-02-01 2 views
1

Я работаю над двумя аналогичными проектами, но я не создал ни одного из них.Как работает Identity.EntityFramework OnModelCreating под названием

Они оба имеют один и тот же локальный контекст, следующим образом:

using Microsoft.AspNet.Identity.EntityFramework; 

    public class LocalContext : 
     IdentityDbContext 
      <ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim> 
    { 
    //..... 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      AddConfigurations(modelBuilder); 
     } 
    } 

Поиск всего проекта для ссылок на OnModelCreating возвращает 2 экземпляра, упомянутые выше, а также ссылку на этот метод в пространстве имен Microsoft.AspNet.Identity.EntityFramework

Эти проекты сделаны с использованием архитектуры Onion, и я запускаю слой REST с помощью Swagger.

Проблема в том, что в одном из проектов вызывается OnModelCreating, когда я запускаю приложение (чего я ожидаю), в то время как в другом он называется в первый раз, когда пользователь делает действие.

Может ли кто-нибудь объяснить, почему это так?

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

Насколько я могу видеть, все ссылки одинаковы между двумя проектами - может ли кто-нибудь помочь?

ответ

2

Он вызывается, когда инициализируется контекст базы данных.

Если вы используете базу данных инициализатору в коде запуска, это произойдет тогда:

Database.SetInitializer(new CreateDatabaseIfNotExists<MyDbContext>()); 

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

using (var context = new MyDbContext()) { 
    ... 
} 
2

Метод OnModelCreating обычно вызывается при создании первого экземпляра производного контекста или использования доступа к данным в вашем приложении. Причина, по которой это происходит в разных точках ваших приложений, вероятно, связана с тем, что вы называете свои уровни доступа к данным в разных точках жизненного цикла. Я думаю, что в этом случае одно приложение создает копию LocalContext при запуске, а другое не создает контекст, пока пользователь не обратится к слою данных.

Посмотрите here на подробную документацию и here на другой вопрос, который затрагивает эту тему.

Смежные вопросы