在单独的程序集中迁移如何避免硬编码连接字符串?

时间:2016-12-07 08:00:30

标签: asp.net-core database-migration entity-framework-core .net-core ef-migrations

我正在编写ASP.NET Core和Entity Framework Core应用程序,我想将我的数据访问层存储在单独的程序集中,所以我遵循了本教程:http://www.michael-whelan.net/ef-core-101-migrations-in-separate-assembly/

但我还想避免硬编码连接字符串。我尝试将其存储在JSON配置文件或环境变量中,并使用ConfigurationBuilder获取它,但在使用命令行迁移工具dotnet ef migrations时,这些都不可用。 有什么方法可以解决这个问题吗?我正在使用.NET Core和EF Core的1.0.1版本。

1 个答案:

答案 0 :(得分:2)

为了解决这个问题,我创建了一个类库,仅用于从我的DbContext派生但带有硬连接连接字符串的DbContext进行迁移。

using Microsoft.EntityFrameworkCore;

namespace ChatLe.Repository.Identity.SqlServer
{
    public class ChatLeIdentityDbContext: ChatLe.Models.ChatLeIdentityDbContext
    {
        public ChatLeIdentityDbContext()
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=chatle;Trusted_Connection=True;MultipleActiveResultSets=true");
            base.OnConfiguring(optionsBuilder);
        }
    }
}

然后我启动这样的ef工具命令:

  • 添加迁移运行dotnet ef --startup-project {path to my startup project} migrations add login-activity --context ChatLe.Repository.Identity.SqlServer.ChatLeIdentityDbContext
  • 升级数据库运行dotnet ef --startup-project {path to my startup project} database update --context ChatLe.Repository.Identity.SqlServer.ChatLeIdentityDbContext

阅读我的git hub项目的完整示例:https://github.com/aguacongas/chatle/tree/develop/src/ChatLe.Repository.Identity.SqlServer