public static MyDBContext Create(string tenantSchema, DbConnection connection) { var compiledModel = modelCache.GetOrAdd ( Tuple.Create(connection.ConnectionString, tenantSchema), t => { var builder = new DbModelBuilder(); builder.Conventions.Remove <IncludeMetadataConvention>(); builder.Entity <Location>().ToTable("Locations", tenantSchema); builder.Entity <User>().ToTable("Users", tenantSchema); var model = builder.Build(connection); return(model.Compile()); } ); var context = new FmsDBContext(connection, compiledModel); if (!string.IsNullOrEmpty(tenantSchema) && !tenantSchema.Equals("dbo", StringComparison.OrdinalIgnoreCase)) { var objectContext = ((IObjectContextAdapter)context).ObjectContext; objectContext.Connection.Open(); var currentUser = objectContext.ExecuteStoreQuery <UserContext>("SELECT CURRENT_USER AS Name", null).FirstOrDefault(); if (currentUser.Name.Equals(tenantSchema, StringComparison.OrdinalIgnoreCase)) { var executeAs = string.Format("REVERT; EXECUTE AS User = '******';", tenantSchema); objectContext.ExecuteStoreCommand(executeAs); } } return(context); }
public static MyDBContext Create(string tenantSchema, DbConnection connection) { var compiledModel = modelCache.GetOrAdd ( Tuple.Create(connection.ConnectionString, tenantSchema), t => { var builder = new DbModelBuilder(); builder.Conventions.Remove <IncludeMetadataConvention>(); builder.Entity <Location>().ToTable("Locations", tenantSchema); builder.Entity <User>().ToTable("Users", tenantSchema); var model = builder.Build(connection); return(model.Compile()); } ); var context = new FmsDBContext(connection, compiledModel); if (!string.IsNullOrEmpty(tenantSchema) && !tenantSchema.Equals("dbo", StringComparison.OrdinalIgnoreCase)) { var executeAs = string.Format("EXECUTE AS User = '******' WITH NO REVERT", tenantSchema); ((System.Data.Entity.Infrastructure.IObjectContextAdapter)context).ObjectContext.Connection.Open(); ((System.Data.Entity.Infrastructure.IObjectContextAdapter)context).ObjectContext.ExecuteStoreCommand(executeAs); } return(context); }