我正在开展两个类似的项目 - 但我没有创建其中任何一个。
它们都具有相同的本地上下文,如下所示:
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架构制作的,我使用Swagger运行REST层。
问题在于,在其中一个项目中,当我启动应用程序(我期望的)时会调用OnModelCreating
,而在另一个项目中,它会在用户第一次执行操作时调用。
任何人都可以解释为什么会这样吗?
我假设某个地方有一个触发此调用的设置 - 但我找不到它 - 正如我上面所说的那样,我搜索了整个项目,但无法找到调用此方法的任何地方。
据我所知,两个项目之间的所有参考文献都是相同的 - 任何人都可以帮忙吗?
答案 0 :(得分:7)
在初始化数据库上下文时调用它。
如果您在启动代码中使用数据库初始化程序,那么它将会发生:
Database.SetInitializer(new CreateDatabaseIfNotExists<MyDbContext>());
否则它会在您第一次创建它的实例时发生:
using (var context = new MyDbContext()) {
...
}
答案 1 :(得分:2)