Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scaffold-DbContext to different output folder

I'm implementing repository pattern in company solution I work for, separating model classes in a Backend project and database context and migrations in DbContexts project.

I'm using Scaffold-DbContext setting my Backend Project as default project to destination of model classes, however DbContext Class is always created in same folder as model classes. Is it possible to redirect the creation of the DbContext class to a different output folder, in my case to DbContexts project?

like image 233
Aldemar Cuartas Carvajal Avatar asked Jan 16 '18 13:01

Aldemar Cuartas Carvajal


5 Answers

It is now possible to redirect the generated context with -ContextDir option:

-ContextDir The directory to put DbContext file in. Paths are relative to the project directory.

So in your case it would be something like this:

Scaffold-DbContext "*connection*" "*provider*" -OutputDir "BackendProject" -ContextDir "DbContexts"

Source: https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell

like image 90
LucaSC Avatar answered Sep 20 '22 13:09

LucaSC


Yes, you can do that with my "EF Core Power Tools" free Visual Studio extension:

https://github.com/ErikEJ/SqlCeToolbox/wiki/EF-Core-Power-Tools

like image 22
ErikEJ Avatar answered Sep 20 '22 13:09

ErikEJ


I faced a similar problem. I had my EF models in a separate project. In order to write the models there, I just used the following command:

Scaffold-DbContext "Server=[Server];Database=[Database Name];Trsted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Project "[Project Name]" -Force 

The key for me was the -Project "[Project Name]" -Force option.

As the top answer indicates, if you want a different folder within that project, you can just use the -OutputDir option.

like image 25
EJoshuaS - Stand with Ukraine Avatar answered Sep 23 '22 13:09

EJoshuaS - Stand with Ukraine


You need to change the Default Project to the project which you want to generate entities in, also specify the folder (using OutputDir switch) where you want to generate the model definition. Example is below

Scaffold-DbContext "Data Source=.\SQLEXPRESS;Initial Catalog=DbName;Integrated Security=SSPI;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f -d

like image 37
Vinod Kumar Gupta Avatar answered Sep 23 '22 13:09

Vinod Kumar Gupta


You can generate models and DBContext in different projects (not only different folders in the same project) like this :

Scaffold-DbContext "connectionString" Microsoft.EntityFrameworkCore.SqlServer -ContextDir "C:\MySolution\DataAccessLayer\Context" -OutputDir "C:\MySolution\DomainLayer\Models" -Namespace "DomainLayer.Models" -ContextNamespace "DataAccessLayer.Context"
  1. Note that the specified paths are absolute.
  2. I know that the documentation says that the path is relative to the project. But it does not forbid to put an absolute path.
  3. The -Namespace and -ContextNamespace are optionnal but I use the to keep my namespaces in sync with class location.
like image 40
ihebiheb Avatar answered Sep 24 '22 13:09

ihebiheb