Во-первых, вам нужно убедиться, что ваш сеанс приложений может пережить перезапуски и повторные пулы приложений. См. Это
Во-вторых, вам нужно ввести строку подключения для вашего DBContext на основе запроса аутентифицированного пользователя.
Я предполагаю, что у вас есть база данных, полная пользователейпоэтому вам нужно сохранить список возможных строк подключения в таблице SQL и связать их с соответствующими учетными записями пользователей.После аутентификации пользователя вам нужно получить строку подключения, связанную с учетной записью пользователя. Вы не хотите хранить строку подключения в сеансе или любом другом механизме, который потенциально может предоставить конфиденциальные данные веб-клиенту. Итак, вкратце, это то, что вам нужно сделать.
- Вы захотите получить строку подключения для каждого запроса на основе аутентифицированного пользователя.
- Вставьте строку подключения в ваш DBContext.
- Делайте вызовы из базы данных по мере необходимости.
- Деньги!
Вводить строки в сущность легко.
Если вы сначала используете код EF 4.1, ваш DBContext будет выглядеть примерно так.EF 4.1 принимает обычные строки подключения ADO.NET.
public class ExampleProvider : DbContext, IExampleProvider
{
private readonly string _nameOrStringConnection;
public ExampleProvider()
{
}
public ExampleProvider(string nameOrStringConnection)
: base(nameOrStringConnection)
{
_nameOrStringConnection = nameOrStringConnection;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Example>().ToTable("example");
modelBuilder.Entity<Example>().HasKey(x => x.ExampleId);
}
public DbSet<Example> Examples { get; set; }
}
Если вы используете EF.edmx, вам нужно будет убедиться, что ваша строка введенного подключения содержит информацию о файлах метаданных edmx, как это ...
... "metadata = res: ///ExampleModel.csdl | res: ///ExampleModel.ssdl | res: //*/ExampleModel.msl; ...
Если вы загляните в файл конструктора edmx, вы увидите, что ваш DBContext имеет несколько перегрузок конструктора. Используйте вторую или третью перегрузку в соответствии с вашими потребностями.
# Контексты региона
/// <summary>
/// No Metadata Documentation available.
/// </summary>
public partial class Entities : ObjectContext
{
#region Constructors
/// <summary>
/// Initializes a new Entities object using the connection string found in the 'Entities' section of the application configuration file.
/// </summary>
public Entities() : base("name=Entities", "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialize a new Entities object.
/// </summary>
public Entities(string connectionString) : base(connectionString, "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialize a new Entities object.
/// </summary>
public Entities(EntityConnection connection) : base(connection, "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
#endregion
/// incomplete file
Удачи!