将数据库代码移动到单独的程序集时将连接字符串放在哪里
Where to put connection string when moving database code to separate assembly
我有一个 Razor Pages 网站应用程序,我想将我的数据库代码移动到一个单独的 project/assembly,这是从我的主 project/assembly.
引用的
创建一个新的 class 项目并从我的 Data 和 Model 文件夹中移动文件非常简单。但是我不清楚我的连接字符串的去向(目前,它在我的主要项目的 appsettings.json 中)。
如何为我的 class 库指定连接字符串?
连接字符串应在服务连接到 DbContext 的同一项目中配置,因此您可以保留 appsettings.json 原样。
设置与数据库的连接的是配置项目(正在设置所有依赖项的项目),EF 迁移工具需要连接来跟踪和应用更改。任何程序集都可以用来存储migrations,但是有实际连接的项目需要调用EF工具
EF Core 使用依赖注入为 运行 时间配置服务,其中包括为任何数据库设置连接字符串。数据库 类 如何与其环境交互的控制权交给了应用 运行 连接它的应用程序,这允许在多个实例、状态甚至提供者之间使用相同的数据库代码。 EF Core 使用它所部署的数据库的当前状态和提供者来确定更改和脚手架,因此它只能使用连接到数据库(通常是开发实例)的已配置 DbContext 实例创建迁移。
当一个解决方案由多个具有共同数据模型的依赖服务组成时,需要相同的迁移,解决方案中只有一个项目应该负责管理数据库状态。无论选择哪个项目,它都需要在启动时创建一个具有有效连接的 DBContext,EF 工具才能工作。 ASP.NET Core 使用Microsoft.Extensions.Configuration
包和UseStartup
方法使配置变得简单。这可以是您现有的 UI 项目,它将从现有设置中读取连接字符串并在启动时将其传递给您的 CustomDbContext。 EF 工具 CLI 将使用默认配置文件(绿色 运行 箭头)从 launchSettings.json
和 appSettings.json
获取设置以连接到数据库。配置应该在您部署到的每个环境中到位,以便迁移可以 运行 来自同一配置项目并根据需要应用。
您可以避免 ASP.NET 并创建一个 custom startup class in your data package that runs to apply migrations, but this is a lot of extra work for something already in the box. The DbContext
class does have an OnConfiguring
method that can be used to set the connection. Placing configuration inside of code limits where the software can run, so it should still be 。
DbContext可以从另一个包中引用:
DbContext 和模型可以在单独的 'pure' 项目中定义,然后在 Startup 中引用,如下所示:
using mysolution.Data.CustomDbContext;
...
services.AddDbContext<CustomDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("defaultConnection")));
将 DbContext 配置为 运行 以及存储迁移的位置:
棘手的部分是应用迁移(如果您使用它们)。如果你的 Razor 程序集被命名为 'mysolution_UI' 而你的数据项目是 'mysolution_Data'。将数据、模型、迁移移动到 mysolution_Data 并将其添加到 mysolution_UI 项目中的启动:
services.AddDbContext<CustomDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("defaultConnection")
, b => b.MigrationsAssembly("mysolution_Data")));
然后在添加或部署包时,应从 'mysolution_UI' 项目调用迁移。
Add-Migration NewMigration -Project mysolution_UI
这允许多个项目为连接到同一数据库的实体使用数据包,但只有一个项目负责维护迁移。
我有一个 Razor Pages 网站应用程序,我想将我的数据库代码移动到一个单独的 project/assembly,这是从我的主 project/assembly.
引用的创建一个新的 class 项目并从我的 Data 和 Model 文件夹中移动文件非常简单。但是我不清楚我的连接字符串的去向(目前,它在我的主要项目的 appsettings.json 中)。
如何为我的 class 库指定连接字符串?
连接字符串应在服务连接到 DbContext 的同一项目中配置,因此您可以保留 appsettings.json 原样。
设置与数据库的连接的是配置项目(正在设置所有依赖项的项目),EF 迁移工具需要连接来跟踪和应用更改。任何程序集都可以用来存储migrations,但是有实际连接的项目需要调用EF工具
EF Core 使用依赖注入为 运行 时间配置服务,其中包括为任何数据库设置连接字符串。数据库 类 如何与其环境交互的控制权交给了应用 运行 连接它的应用程序,这允许在多个实例、状态甚至提供者之间使用相同的数据库代码。 EF Core 使用它所部署的数据库的当前状态和提供者来确定更改和脚手架,因此它只能使用连接到数据库(通常是开发实例)的已配置 DbContext 实例创建迁移。
当一个解决方案由多个具有共同数据模型的依赖服务组成时,需要相同的迁移,解决方案中只有一个项目应该负责管理数据库状态。无论选择哪个项目,它都需要在启动时创建一个具有有效连接的 DBContext,EF 工具才能工作。 ASP.NET Core 使用Microsoft.Extensions.Configuration
包和UseStartup
方法使配置变得简单。这可以是您现有的 UI 项目,它将从现有设置中读取连接字符串并在启动时将其传递给您的 CustomDbContext。 EF 工具 CLI 将使用默认配置文件(绿色 运行 箭头)从 launchSettings.json
和 appSettings.json
获取设置以连接到数据库。配置应该在您部署到的每个环境中到位,以便迁移可以 运行 来自同一配置项目并根据需要应用。
您可以避免 ASP.NET 并创建一个 custom startup class in your data package that runs to apply migrations, but this is a lot of extra work for something already in the box. The DbContext
class does have an OnConfiguring
method that can be used to set the connection. Placing configuration inside of code limits where the software can run, so it should still be
DbContext可以从另一个包中引用:
DbContext 和模型可以在单独的 'pure' 项目中定义,然后在 Startup 中引用,如下所示:
using mysolution.Data.CustomDbContext;
...
services.AddDbContext<CustomDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("defaultConnection")));
将 DbContext 配置为 运行 以及存储迁移的位置:
棘手的部分是应用迁移(如果您使用它们)。如果你的 Razor 程序集被命名为 'mysolution_UI' 而你的数据项目是 'mysolution_Data'。将数据、模型、迁移移动到 mysolution_Data 并将其添加到 mysolution_UI 项目中的启动:
services.AddDbContext<CustomDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("defaultConnection")
, b => b.MigrationsAssembly("mysolution_Data")));
然后在添加或部署包时,应从 'mysolution_UI' 项目调用迁移。
Add-Migration NewMigration -Project mysolution_UI
这允许多个项目为连接到同一数据库的实体使用数据包,但只有一个项目负责维护迁移。