EFコアでの作業に問題があります。私は、スキーマメカニズムを介して、プロジェクトのデータベース内の異なる企業のデータを分離したいと考えています。私の質問は、実行時にスキーマ名を変更する方法です。私はこの問題についてsimilar questionを見つけましたが、まだ回答があり、いくつかの条件があります。だから私は前に発見されたとして、Entity Frameworkコアのスキーマが動的に変更される
public static void Resolve(IServiceCollection services) {
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<DomainDbContext>()
.AddDefaultTokenProviders();
services.AddTransient<IOrderProvider, OrderProvider>();
...
}
は、私がOnModelCreating
でスキーマ名を設定することができ、必要なDB-コンテキストを付与しますが、Resolve
方法、一度だけ呼ばれるこの方法を持っているので、私はグローバルに、ここのようなスキーマ名を設定することができます属性を経由して、そのモデルで
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メソッドを維持しているとは思いませんすべての可能な設定と移行... –