我正在使用實體框架的數據庫優先方法。我想在一個數據庫中有多個公司,爲此,我希望能夠在創建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);
}
}
第一和第二上下文查詢公司1 $用戶沉綿我打電話第二個與「公司2」。