[英]How to force fire OnModelCreating every DataContext initialized up
[英]ASP.NET Core OnModelCreating force to fire in every request
ASP.NET Core OnModelCreating強制在每個請求中觸發
我有ASP.NET Core(1.1.0)和SQL Server數據庫。 在登錄頁面中,我有一個帶有帶有公司名稱的選擇框的表單。
例如:
如果用戶選擇第一個“ 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.