2015-09-08 2 views
0

У меня проблема с Entity Framework и DBContext с несколькими именами схем. Он работает только, если я удалю таблицу dbo .__ MigrationHistory или конкретную запись.Entity Framework Многопользовательская и динамическая схема

Сначала мой DatabaseContext:

public class AppTenantDatabaseContext : DbContext, IServiceStatusDatabaseContext, IDbModelCacheKeyProvider 
{ 
    public DbSet<Container> Items{ get; set; } 

    protected string _prefix; 

    public AppTenantDatabaseContext(string prefix, string connectionStringName) : base(connectionStringName) 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
     _prefix = prefix; 
     System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<AppTenantDatabaseContext>()); 
    } 

    public AppTenantDatabaseContext(string prefix) : base("AppFramework") 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
     _prefix = prefix; 
     System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<AppTenantDatabaseContext>()); 
    } 

    public AppTenantDatabaseContext() : this(string.Empty) { } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.HasDefaultSchema(this._prefix);    
     modelBuilder.Entity<Container>().ToTable("Container", schemaName: _prefix); 
     base.OnModelCreating(modelBuilder); 
    } 

    public string CacheKey 
    { 
     get { return this._prefix; } 
    } 
} 

Если я запустить DbContext запись в таблице __MigrationHistory добавляется для ContextKey от полного имени класса с моделью, которая содержит схему. Если я хочу создать таблицы для другой схемы, код запускается в исключение, потому что модели разные. Это понятно.

Теперь мой вопрос: Как мне его достичь, чтобы работать с таблицей истории миграции, не удаляя ее?

В моем мнении это может сработать, если либо таблица __MigrationHistory будет создана для имени схемы foreach вместо «dbo», либо если таблица __MigrationHistory содержит имя для имени foreach в сочетании с именем класса. Как я могу это сделать?

Благодарим за помощь!

ответ

0

Как я могу достичь этого, чтобы работать с таблицей истории миграции, не удаляя его?

Вы можете играть с Database.SetInitializer<MyContext>(null);.

Например if (String.IsNullOrEmpty(_prefix)) {...}

Это позволит:

работы с таблицей истории миграции, не удаляя его

Но это не позволит работать с миграцией, а не для все префикс, за исключением стандартного.

PS: может быть проще работать с множеством БД, а не с множеством схем.

+0

Есть ли способ получить эту работу с миграциями? – Basti

+0

не знаю. – tschmit007