簡體   English   中英

如何調用Identity.EntityFramework OnModelCreating

[英]How is Identity.EntityFramework OnModelCreating called

我正在做兩個類似的項目 - 但我沒有創建它們中的任何一個。

它們都具有相同的本地上下文,如下所示:

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在我啟動應用程序時調用(我期望),而在另一個項目中,它是在用戶第一次進行操作時調用的。

誰能解釋為什么會這樣?

我假設某個地方有一個觸發此調用的設置 - 但是我找不到它 - 正如我上面所說的,我已經搜索了整個項目,但找不到任何調用此方法的地方。

據我所知,兩個項目之間的所有參考文獻都是相同的 - 有人可以幫忙嗎?

在初始化數據庫上下文時調用它。

如果您在啟動代碼中使用數據庫初始化程序,那么它將會發生:

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

否則,它將在您第一次創建它的實例時發生:

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

通常在創建派生上下文的第一個實例或在應用程序中使用數據訪問時調用OnModelCreating方法。 這是因為您在應用程序中的不同點可能是因為您在生命周期的不同點調用數據訪問層。 我認為在這種情況下,一個應用程序在啟動時創建LocalContext的副本,而另一個應用程序在用戶訪問數據層之前不創建上下文。

看看這里有一些詳細的文檔, 這里是另一個涉及這個主題的SO問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM