我在使用EF Core時遇到了問題。我想通過模式機制將項目數據庫中不同公司的數據分開。我的問題是我如何在運行時更改模式名稱?我發現similar question關於這個問題,但它仍然回答,我有一些不同的條件。所以,我有Resolve
方法授予DB-背景下,必要時在Entity Framework Core中動態更改模式
public static void Resolve(IServiceCollection services) {
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<DomainDbContext>()
.AddDefaultTokenProviders();
services.AddTransient<IOrderProvider, OrderProvider>();
...
}
我可以在OnModelCreating
集架構的名稱,但是,正如之前被發現,這種方法被稱爲只有一次,所以我可以globaly喜歡這裏設置模式名這
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("public");
base.OnModelCreating(modelBuilder);
}
或向右模型通過這樣的
[Table("order", Schema = "public")]
public class Order{...}
但我怎麼能在運行時更改模式名稱的屬性?我爲每個請求創建了ef的上下文,但是首先我通過請求數據庫中的某個模式共享表來爲用戶提供模式名稱。那麼組織該機制的真正方法是什麼:
- 根據用戶憑證找出模式名稱;
- 從特定模式的數據庫中獲取用戶特定的數據。
謝謝。
P.S.我使用PostgreSql,這是表名低的原因。
正如我上面所寫的,在OnModelCreating中沒有坐在模式名稱的問題,問題是這個方法只調用一次,所以下一個創建的上下文將具有相同的模式。但是,也許我錯過了一些重要的答覆? – user3272018
我明白了你的觀點,你是對的,我以前的答案不包括OnModelCreating問題的解決方案,但是我在博客上搜索了這個問題的解決方案,並且我找到了OnConfiguring方法的代碼,我修改了我的答案,請檢查它並讓我知道如果是有用的[鏈接](https://github.com/Grinderofl/FluentModelBuilder/issues/9) –
這可能適用於小項目,但我無法想象維護數百個表的MapProduct方法,而不是提及所有可能的設置和遷移... –