Migrations with contexts in different projects
Problems arise if your context is in a different project than the startup one.
Problem
If you have an entry assembly and an additional project/assembly that contains your DbContext
and your model, migrations won't work. This is by design.
For example, you have an assembly called Web
and an assembly called DomainModel
. The latter contains the DbContext
and all the model classes and you are trying to generate a migration from the Web
folder using the following:
dotnet ef migrations add "Initial version"
You could also use a similar one. You will get a "Your target project 'Web' doesn't match your migrations assembly 'DomainModel'
" error.
How to solve it…
You either need to pass the --startup-project
flag to dotnet
, if you run it from the DomainModel project:
dotnet ef --startup-project ..\Web migrations add "Initial version"
Or, from within code, you need to tell Entity Framework which one will be the project containing the startup code:
protected override void OnConfiguring( DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(_connectionString, opt => { //set the migrations assembly opt.MigrationsAssembly("Web"); }); base.OnConfiguring(optionsBuilder); }
Note
And, by the way, make sure that you include the Microsoft.EntityFrameworkCore.Design
and Microsoft.EntityFrameworkCore.Tools
Nuget packages.