- 读取配置文件
- 构建控制台依赖注入
- 通过上下文工厂实现模型迁移
- 读取配置文件
在程序包管理控制台安装下面这个包
Install-Package Microsoft.Extensions.Configuration.Json -Version 2.2.0
添加文件AppSettings.Json
同时添加代码,读取路径,生成一个根配置
var configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("AppSettings.json"); var configuration = configurationBuilder.Build();
这样构建完之后,我们就可以把数据库连接字符串写在这个AppSettings.json 里。
- 构建控制台依赖注入
Install-Package Microsoft.Extensions.DependencyInjection -Version 2.2.0
安装微软用于依赖注入的包,然后实例化一个容器对象,接着就可以在容器中实现依赖注入了。
ServiceCollection serviceCollection = new ServiceCollection();
- 通过上下文工厂实现模型迁移
这里用MSSQL 来做演示。接下来安装EF Core For MSSQL的包,以及工具包
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.3
Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.2.3
迁移前准备工作
构建一个模型
public class AddressBook { [Key] public int Id { get; set; } public string Name { get; set; } public bool Sex { get; set; } public string Telephone { get; set; } }
构建上下文
public class DemoDbContext: DbContext { public DemoDbContext(DbContextOptions<DemoDbContext> options) : base(options) { } public virtual DbSet<AddressBook> AddressBooks { get; set; } }
注入连接池到容器中
serviceCollection.AddDbContextPool<DemoDbContext>(options => options.UseSqlServer(configuration.GetConnectionString("AddressBook")));
将容器构建出来
var service = serviceCollection.BuildServiceProvider();
新增一个类,类似于mvc里面的控制器
public class AddressCurd { private readonly DemoDbContext _context; public AddressCurd(DemoDbContext context) { _context = context; } public void Run() { _context.Set<AddressBook>().Add(new AddressBook { Name="王小明", Sex = true, Telephone = "18012155050" }); _context.SaveChanges(); } }
通过下面这个方法解析这个类,然后就可以执行这个类里面的方法。
var instance = ActivatorUtilities.CreateInstance<AddressCurd>(service); instance.Run();
。。。等等,是不是还没迁移。就开始写curd了。。。
emm.那我们先迁移。
你以为接下来要输入add-migration 了嘛? 不。
控制台的Main函数对于EF迁移工具来说就是一个黑盒,它根本就不知道你要连接哪个数据库。怎么办呢?之前写的都白写了嘛?
当然不可能。微软为我们提供了一个IDesignTimeDbContextFactory,给我们提供了一个运行时的上下文
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<DemoDbContext> { public DemoDbContext CreateDbContext(string[] args) { var configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("AppSettings.json"); var configuration = configurationBuilder.Build(); var dbContextOptionsBuilder = new DbContextOptionsBuilder<DemoDbContext>(); dbContextOptionsBuilder.UseSqlServer(configuration.GetConnectionString("AddressBook")); return new DemoDbContext(dbContextOptionsBuilder.Options); } }
接下来执行迁移
add-migration init
update-database
我们的数据库里就有这个表了
接下来我们运行这个程序,它将会执行Address 下的Run方法 添加一条记录
OK 使用控制台构建EF进行迁移 不知道你们有没有学会了呢
项目地址 https://gitee.com/xuxml/EfCoreDemo