From 3a297a608c4b953ae58cd6f77c635bb951e0c6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Mon, 5 Jul 2021 18:48:42 +0300 Subject: [PATCH] update startup-templates/application documentation ref ( #9284 ) --- docs/en/Startup-Templates/Application.md | 18 ++---------------- .../bookstore-visual-studio-solution-v3.png | Bin 12919 -> 10806 bytes 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index 81f0170e59..1fdf980ddc 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -128,20 +128,6 @@ This is the integration project for the EF Core. It defines the `DbContext` and > This project is available only if you are using EF Core as the database provider. If you select another database provider, its name will be different. -#### .EntityFrameworkCore.DbMigrations Project - -Contains EF Core database migrations for the solution. It has a separated `DbContext` to dedicated to manage migrations. - -ABP is a modular framework and with an ideal design, each module has its own `DbContext` class. This is where the migration `DbContext` comes into play and unifies all `DbContext` configurations into a single model to maintain a single database schema. For more advanced scenarios, you can have multiple databases (each contains a single or a few module tables) and multiple migration `DbContext`s (each maintains a different database schema). - -Notice that the migration `DbContext` is only used for database migrations and *not used on runtime*. - -* Depends on the `.EntityFrameworkCore` project since it re-uses the configuration defined for the `DbContext` of the application. - -> This project is available only if you are using EF Core as the database provider. -> -> See the [Entity Framework Core Migrations Guide](../Entity-Framework-Core-Migrations.md) to understand this project in details. - #### .DbMigrator Project This is a console application which simplifies to execute database migrations on development and production environments. When you run this application, it; @@ -156,7 +142,7 @@ Especially, seeding initial data is important at this point. ABP has a modular d While creating database & applying migrations seems only necessary for relational databases, this projects comes even if you choose a NoSQL database provider (like MongoDB). In that case, it still seeds initial data which is necessary for the application. -* Depends on the `.EntityFrameworkCore.DbMigrations` project (for EF Core) since it needs to access to the migrations. +* Depends on the `.EntityFrameworkCore` project (for EF Core) since it needs to access to the migrations. * Depends on the `.Application.Contracts` project to be able to access permission definitions, because initial data seeder grants all permissions for the admin role by default. #### .HttpApi Project @@ -187,7 +173,7 @@ This project contains the main `appsettings.json` file that contains the connect * Depends on the `.HttpApi` since UI layer needs to use APIs and application service interfaces of the solution. -> If you check the source code of the `.Web.csproj` file, you will see the references to the `.Application` and the `.EntityFrameworkCore.DbMigrations` projects. +> If you check the source code of the `.Web.csproj` file, you will see the references to the `.Application` and the `.EntityFrameworkCore` projects. > > These references are actually not needed while coding your UI layer, because UI layer normally doesn't depend on the EF Core or the Application layer's implementation. This startup templates are ready for the tiered deployment, where API layer is hosted in a separate server than the UI layer. > diff --git a/docs/en/images/bookstore-visual-studio-solution-v3.png b/docs/en/images/bookstore-visual-studio-solution-v3.png index 307e3516a5414173016efaedd22e53983fa25f1c..f8ef7f2ba0de7b671baff05c3f4de5fbdc0d09e7 100644 GIT binary patch literal 10806 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 Y`=8bhBcTZRt>>bBP6r)n4#zJ1AGaTv`~Uy| literal 12919 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