asp.net-core – 从appsettings.json获取ConnectionString,而不
我在NET Core2.0 App中有以下类。
// required when local database does not exist or was deleted public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext> { public AppContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder<AppContext>(); builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true"); return new AppContext(builder.Options); } } 当Database不存在时,在Core 2.0中需要进行迁移,并且必须在运行update-database时创建。 我想在2个地方(这里和appsettings.json)没有ConnectionString,但只在.json中 "Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true" 同 ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString 但它不起作用,我得到空值。 更新1: 更新2: public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<AppContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); } } 但我不能将它用于ToDoContextFactory,因为它没有配置,并且迁移使用ToDoContextFactory,因此App根本不运行。 解: public AppContext CreateDbContext(string[] args) { string projectPath = AppDomain.CurrentDomain.BaseDirectory.Split(new String[] { @"bin" },StringSplitOptions.None)[0]; IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(projectPath) .AddJsonFile("appsettings.json") .Build(); string connectionString = configuration.GetConnectionString("DefaultConnection"); var builder = new DbContextOptionsBuilder<AppContext>(); builder.UseSqlServer(connectionString); return new AppContext(builder.Options); } 解决方法
第1步:在OnConfiguring()中包含以下内容
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json") .Build(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); } 第2步:创建appsettings.json: { "ConnectionStrings": { "DefaultConnection": "Server=YOURSERVERNAME; Database=YOURDATABASENAME; Trusted_Connection=True; MultipleActiveResultSets=true" } } 第3步:将appsettings.json硬拷贝到正确的目录 Hard copy appsettings.json.config to the directory specified in the AppDomain.CurrentDomain.BaseDirectory directory. Use your debugger to find out which directory that is. 假设:您已经在项目中包含了Microsoft.Extensions.Configuration.Json(从Nuget获取)包。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 编辑并继续不在Windows 7,32位操作系统上
- asp.net-mvc – 优化性能或属性路由和路由表
- asp.net – 无法加载文件或程序集“System.Web.Mvc,Version
- asp.net-mvc-3 – 带有Npgsql和Entity Framework以及.Net F
- asp.net核心 – 如何在Asp.Net Core中注册同一个接口的多个
- asp.net-mvc-3 – 检查.NET MVC中的AngularJS $资源请求服务
- asp.net-mvc – mvc视图中的模型空引用异常
- asp.net – 实体框架Web配置文件
- 在ASP.NET上启动维护流程的最佳实践是什么
- asp.net – 设置Orchard开发工作区
- asp.net – 将提交请求提交到aspx页面
- asp.net-mvc – 以视图的形式显示视图中多个表的
- asp.net – 当我提交时,为什么我的文本框无法识别
- asp.net – User.Identity.Name是否为空?
- 剃刀 – 输入隐藏显示不正确的ID(Guid.Empty)
- 在ASP.NET MVC Web API服务和MVC客户端体系结构中
- asp.net jquery用文本框添加行(克隆行)并动态下拉
- 序列化 – Newtonsoft中的TypeNameHandling需要$
- asp.net – ViewState作为属性
- 将Instant Messaging集成到ASP.NET应用程序中