我对Entity Framework和具有多个模式名称的DBContext有问题。它只有在我删除dbo .__ MigrationHistory表或特定条目时才有效。
首先是我的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表将在模式名称而不是“dbo”中创建,或者__MigrationHistory表包含与类名称组合的条目foreach模式名称,则它可以工作。我怎么能这样做?
感谢您的帮助!
答案 0 :(得分:0)
如何使用迁移历史记录表来实现它而不删除它?
您可以使用Database.SetInitializer<MyContext>(null);
。
例如if (String.IsNullOrEmpty(_prefix) ) {...}
这将允许:
使用迁移历史记录表,而不删除它
但这不允许使用Migration,而不是所有前缀,默认值除外。
PS:使用多个DB而不是使用多个模式可能更容易。