Entity Framework の Database First アプローチを使用しています。1 つのデータベースに複数の会社を持ちたいので、DBContext を作成するときにテーブル名の前にプレフィックス (つまり、Company1$Users、Company2$Users) を追加して、テーブル名を上書きできるようにしたいと考えています。会社を変えるまでは、最初はすべてうまくいきます。DBContext はエンティティをキャッシュしているようで、次回コンテキストを作成するときに OnModelCreating を起動しません。私はほとんどどこでも解決策を探してきましたが、何も見つからないようです。この問題を抱えているのは私だけですか? それは実際に可能ですか?誰かがこれで私を助けてくれますか?
問題を再現するコードは次のとおりです。
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
}
public class EntityMappingContext : DbContext
{
public String CompanyId { get; set; }
public DbSet<User> Users { get; set; }
public EntityMappingContext(string companyId = null) : base("DB")
{
CompanyId = companyId;
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable(CompanyId + "$Users");
base.OnModelCreating(modelBuilder);
}
}
問題を再現するには、次を実行できます。
using (var context = new EntityMappingContext("Company1"))
{
foreach (var user in context.Users)
{
Console.WriteLine(user.FirstName + " " + user.LastName);
}
}
using (var context = new EntityMappingContext("Company2"))
{
foreach (var user in context.Users)
{
Console.WriteLine(user.FirstName + " " + user.LastName);
}
}
最初と 2 番目のコンテキストは Company1$Users をクエリしますが、2 番目のコンテキストは "Company2" で呼び出します。