【发布时间】:2015-12-03 23:24:41
【问题描述】:
我对具有多个架构名称的实体框架和 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 添加一个条目。如果我想为另一个模式创建表,代码会在异常中运行,因为模型不同。可以理解。
现在我的问题: 如何在不删除迁移历史表的情况下实现它?
在我看来,如果为每个模式名称而不是“dbo”创建 __MigrationHistory 表,或者如果 __MigrationHistory 表包含与类名称组合的每个模式名称的条目,它可能会起作用。我该怎么做?
感谢您的帮助!
【问题讨论】:
标签: c# sql-server asp.net-mvc entity-framework