我有一个具有多个DbContext(每个都有一个单独的架构)的API,它们都存在于同一数据库中且具有相同的连接字符串。一个API具有默认的“ dbo”,另一个是“ template”。部署时,仅创建dbo表,不创建模板架构表。我注意到,虽然数据库的“安全性”->“模式”部分中不存在模式“模板”。
Azure DevOps没有错误,也没有日志显示任何内容。
我可以在本地正常运行update-database -ConfigurationTypeName Configuration
和update-database -ConfigurationTypeName TemplateConfig
。
常规配置的上下文是:
namespace Acme.DAL.Contexts
{
public class TemplateDbContext : BaseDbContext
{
public virtual DbSet<Template> Templates { get; set; }
public TemplateDbContext() : base(ConnectionString)
{
SchemaName = "template";
Database.SetInitializer(new MigrateDatabaseToLatestVersion<TemplateDbContext, TemplateConfig>());
}
public TemplateDbContext(string connString) : base(connString)
{
SchemaName = "template";
}
}
}
BaseDbContext只是
namespace Acme.DAL.Contexts
{
public abstract class BaseDbContext : DbContext
{
protected const string ConnectionString = "AcmeContext";
protected string SchemaName;
protected BaseDbContext() : base(ConnectionString) {}
protected BaseDbContext(string connString) : base(connString) {}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (SchemaName != null)
{
modelBuilder.HasDefaultSchema(SchemaName);
}
base.OnModelCreating(modelBuilder);
}
}
}
配置文件为:
namespace Acme.DAL.Migrations.Templates
{
public class TemplateConfig : DbMigrationsConfiguration<TemplateDbContext>
{
public TemplateConfig()
{
AutomaticMigrationsEnabled = false;
CommandTimeout = 300;
MigrationsDirectory = @"Migrations\Templates";
}
protected override void Seed(TemplateDbContext context)
{
context.TemplateWorkshops.AddOrUpdate(x => x.Name, SeedTemplates.GetTemplates().ToArray());
base.Seed(context);
}
}
}
namespace Acme.DAL.Migrations
{
public sealed class Configuration : DbMigrationsConfiguration<Contexts.ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
CommandTimeout = 300;
}
protected override void Seed(Contexts.ApplicationDbContext context)
{
context.Clients.AddOrUpdate(x => x.Name, SeedClients.GetDefaultClients().ToArray());
base.Seed(context);
}
}
}
如有其他需要,请喊。
我检查了连接字符串在到达发布的Web API时是否已被更改,但是没有,这仍然是正确的。
我希望这会在本地运行update-database
的情况下起作用。
答案 0 :(得分:0)
问题在于,在我访问网站的一部分之前,发生了一些问题,这将导致为TemplateDbContext调用setInitializer
方法。因此,没有构造表格(根据Flex的注释(因为注释是注释,所以不知道如何标记您的名字))。
上面的代码本身是可以的。