我的應用程序中有兩個上下文。 一個在WebApi Project -> ApiContext (inherited from IdentityDbContext)
另一個在Infrastructure -> Context
。在Asp.Net Core中有兩個上下文的數據庫遷移(Docker上的SQL Server)
我在Linux上爲Docker Engine(microsoft/mssql-server-linux
)使用Microsoft SQL Server的官方映像。我寫了DbFactory
。下面你可以找到我的代碼。
APICONTEXT: 內部類APICONTEXT:IdentityDbContext { 公共APICONTEXT(DbContextOptions選項):基座(選項) { Database.EnsureDeleted(); }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
語境
內部類上下文:的DbContext { 公共上下文(DbContextOptions選項):基座(選項) { Database.EnsureCreated(); }
public DbSet<Reservation> Reservations { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Table>().ToTable("Table");
}
}
在我的基建項目,我有我說DbFactory
public class DesignTimeDbContextFactory<T> : IDesignTimeDbContextFactory<T>
where T : DbContext
{
public T CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder<T>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString);
var dbContext = (T)Activator.CreateInstance(
typeof(T),
builder.Options);
return dbContext;
}
}
和
internal class ContextDesignTimeDbContextFactory : DesignTimeDbContextFactory<Context>
{
}
和的WebAPI項目
internal class ApiContextDesignTimeDbContextFactory : DesignTimeDbContextFactory<ApiContext>
{
}
我想用實體框架核心遷移。 當我運行
dotnet ef migrations add InitialCreate
在ApiProject
(使用CMD) 我得到
不止一個的DbContext被發現。指定使用哪一個。對於PowerShell命令使用 '-Context'參數,對於dotnet命令使用'--context' 參數。
請問我該如何處理Asp.Net Core 2.0和EntityFrameworkCore 2和docker上的兩個上下文的數據庫遷移問題。
所以我應該使用命令兩次,一次爲APICONTEXT和一次語境,對不對? – Cieja
是的,確實如此。 – Orhun