Kon*_*rad 11 c# entity-framework-core .net-core asp.net-core
ASP.NET Core项目模板随附,appsettings.json并且appsettings.Development.json默认情况下会在CreateDefaultBuilder中添加.
由于该项目DbContext是从我的ASP.NET核心项目分开(MyProject.Data),我必须执行IDesignTimeDbContextFactory,以便我的上下文像命令Add-Migration和Update-Database工作.我不想硬编码我的连接字符串,IDesignTimeDbContextFactory但在两个项目中重新使用配置.
我的解决方案很少但我想知道根据你的经验和意见最合理的是什么.
IDesignTimeDbContextFactory在我的ASP.NET核心(UI层)项目.IDesignTimeDbContextFactory在我的MyProject.Data项目中实现,并移动appsettings.json到configuration项目之间共享的某个根目录或(位于根目录)目录.database.json将其放在我的.sln文件旁边.我该如何分享?
编辑:
这里有类似的问题和答案:数据层中的appsettings.json与实体框架核心的ConnectionString,但它没有回答我的问题.根本没有关于数据层的任何内容.我不想重新使用逻辑来添加db上下文.我想在两个项目中重用连接字符串,以避免重复连接字符串.
虽然通常建议在中央位置进行配置,但没有任何限制单个项目管理自己的配置。
在以下示例中,连接字符串信息存储在外部datasettings.json文件中
{
"ConnectionStrings": {
"DefaultConnection": "connection string here"
}
}
Run Code Online (Sandbox Code Playgroud)
该层的自包含设置扩展的一个简单示例可能如下所示
public static class MyServiceCollectionExtensions {
public static IServiceCollection AddMyDataLayer(this IServiceCollection services, string name = "DefaultConnection") {
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("datasettings.json"); //<<< just an example
var connectionStringConfig = builder.Build();
services
.AddEntityFrameworkSqlServer()
.AddDbContext<YourDbContext>((serviceProvider, options) =>
options
.UseSqlServer(connectionStringConfig.GetConnectionString(name))
);
return services;
}
}
Run Code Online (Sandbox Code Playgroud)
并在启动中添加
using my.data.layer;
//...
public void ConfigureServices(IServiceCollection services) {
//...
services.AddMyDataLayer();
//...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数据层管理其自己的配置。其设置文件位于应用程序设置之外。
存在扩展空间,因为其他选项也可以在本地管理,并且适用于例如即插即用的插件解决方案。
ASP.NET Core 中配置的模块性质允许这种灵活性。
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |