簡體   English   中英

ASP.NET Core OnModelCreating強制在每個請求中觸發

[英]ASP.NET Core OnModelCreating force to fire in every request

ASP.NET Core OnModelCreating強制在每個請求中觸發

我有ASP.NET Core(1.1.0)和SQL Server數據庫。 在登錄頁面中,我有一個帶有帶有公司名稱的選擇框的表單。

例如:

  • 公司1
  • 公司2

如果用戶選擇第一個“ Company 1”,則需要使用公司前綴重命名所有表:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    foreach (var entity in builder.Model.GetEntityTypes())
    {
       entity.Relational().TableName = "Company 1" + entity.DisplayName();
    }
}

它工作正常,但是問題是當用戶選擇了錯誤的公司,或者注銷系統並使用其他公司重新登錄時,OnModelCreating再也不會被調用,而且我無法重新配置dbContext。

是否可以為每個請求強制執行OnModelCreating?

還是在dbContext初始化后更改表名?

謝謝!

這是錯誤的方式。 當EF從您的類創建/描述模型時,將運行OnModelCreating 這里有很多反射和類型操作,包括驗證關系,與真實數據庫進行比較(並檢查是否需要遷移)等等。 您是否真的需要在每個請求上都運行所有這些東西???

不要為每個請求重新創建DbContext。 創建多個DbContext,並在請求開始時選擇其中一個(創建一次!)。

例如:

使您的主要DbContext抽象,並根據需要創建盡可能多的CompanyXDbContext。 它們都應繼承自基類,並為基類提供簡單的表前綴(在ctor中)。

在代碼中的任何地方,當您需要DbContext時,請向DI索取抽象/基類。

Startup ,使用工廠方法注冊抽象的DbContext,以根據當前的Request變量/參數選擇真實的DbContext,或編寫自定義中間件,該中間件根據當前Request創建正確的實例。


如果您有很多CompanyX,則可能需要其他東西,而不是許多預編碼的CompanyXDbContext類,而某些東西已經創建了運行時類,或者可能是泛型的……但是主要思想仍然沒有改變-不要一次又一次地重新創建模型每個請求。

暫無
暫無

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

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