Entity 重新创建实体单例

Entity 重新创建实体单例,entity,code-first,dbcontext,Entity,Code First,Dbcontext,我使用实体框架的数据库优先方法。我希望在一个数据库中有多个公司,为此,我希望能够在创建DBContext时通过在表名前面添加前缀(即Company1$Users,Company2$Users)来覆盖表名。在我改变公司之前,第一次一切都很顺利。DBContext似乎缓存实体,并且在下次创建上下文时不会在模型创建时触发。我几乎到处都在寻找解决方案,但似乎找不到任何解决方案。我是唯一有这个问题的人吗?真的有可能吗?有人能帮我吗 重新创建问题的代码如下所示: public class User {

我使用实体框架的数据库优先方法。我希望在一个数据库中有多个公司,为此,我希望能够在创建DBContext时通过在表名前面添加前缀(即Company1$Users,Company2$Users)来覆盖表名。在我改变公司之前,第一次一切都很顺利。DBContext似乎缓存实体,并且在下次创建上下文时不会在模型创建时触发。我几乎到处都在寻找解决方案,但似乎找不到任何解决方案。我是唯一有这个问题的人吗?真的有可能吗?有人能帮我吗

重新创建问题的代码如下所示:

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);
    }

}

第一个和第二个上下文查询Company1$Users,尽管我用“Company2”调用第二个上下文。

如果您浏览文档,它会显示OnModelCreating方法:

通常,在创建派生上下文的第一个实例时,此方法只调用一次。然后缓存该上下文的模型,并用于应用程序域中上下文的所有其他实例。可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存,但这会严重降低性能。通过直接使用DbModelBuilder和DbContext类,可以提供对缓存的更多控制

希望能有帮助

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);
    }
}