十年河东,十年河西,莫欺少年穷
学无止境,精益求精
1、新建控制台程序并添加项目引用
Install-Package Microsoft.EntityFrameworkCore -Version 3.1.0
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.0
Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.0
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 3.1.0Install-Package Microsoft.Extensions.Configuration -Version 6.0.1
Install-Package Microsoft.Extensions.Hosting -Version 6.0.1Install-Package Microsoft.Extensions.Hosting.WindowsServices -Version 6.0.0说明,前四个引用和EfCore相关,后三个引用用于依赖注入,配置文件读取及发布为windows服务
2、添加配置文件
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ConnectionStrings": {
    "WuAnDBContext": "Data Source=xxxx;Initial Catalog=WuAnDB;Password=xxx+#;User ID=sa;"
  },
  "myKey": "hello  windows  service",
  "RedisConnectionString": "127.0.0.1:6379,allowadmin=true"
}3、增加数据库上下文类库WuAnDbContext,并引用EfCore相关包
Install-Package Microsoft.EntityFrameworkCore -Version 3.1.0
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.0
Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.0
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 3.1.0
红色框内两个项目均需要引用上述四个包
5、执行脚本,生成数据库上下文
注意,控制台入库程序所在项目须引用WuAnDbContext项目
Scaffold-DbContext "Data Source=xxx;Initial Catalog=WuAnDB;Password=xxxxx;User ID=sa;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Forc6、代码如下:


using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.IO;
using WuAnDbContext.Models;
using wuanInterface;
using wuanService;
namespace BatteryOTA
{
    internal class Program
    {
        static string connectionString;
        static void Main(string[] args)
        {
            CreateHostBuilder(args).Run();
        } 
        public static IHost CreateHostBuilder(string[] args)
        { 
            var builder = Host.CreateDefaultBuilder(args).
                    ConfigureAppConfiguration((hostContext, configApp) =>
                    { 
                        var configuration = configApp.Build(); 
                        configApp.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                        connectionString= getDatabase(configuration);
                    }) 
                    .ConfigureServices((hostContext, services) =>
                    {
                        var basePath = Directory.GetCurrentDirectory();
                    #region SQLSERVER
                        services.AddDbContext<WuAnDBContext>(options =>
                         options.UseSqlServer(connectionString), ServiceLifetime.Transient);
                    #endregion
                        services.AddTransient<IBatteryService, BatteryService>();
                    }).UseWindowsService();
            var host = builder.Build();
            using (var serviceScope = host.Services.CreateScope())
            {
                var services = serviceScope.ServiceProvider;
                var myConfig = services.GetRequiredService<IConfiguration>();
                Console.WriteLine(myConfig.GetSection("mykey"));
                //
                var service = services.GetRequiredService<IBatteryService>();
                service.gettest();
            } 
            return host;
        }
        /// <summary>
        /// 获取化数据库配置
        /// </summary>
        /// <param name="configuration">应用程序配置</param>
        /// <returns></returns>
        public static string getDatabase(IConfigurationRoot configuration)
        {
            var connectionString = configuration.GetConnectionString("WuAnDBContext");
            return connectionString;
        }
    }
}View Code
IBatteryService
public interface IBatteryService
    {
        void gettest();
    }BatteryService
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WuAnDbContext.Models;
using wuanInterface;
namespace wuanService
{
    public class BatteryService: IBatteryService
    {
        protected readonly WuAnDBContext context;
        public BatteryService(WuAnDBContext context)
        {
            this.context = context;
        }
        public void gettest()
        {
            var s = context.BaseBattery.Where(A => A.BatteryNo.Contains("312")).ToArray();
        }
    }
}@陈卧龙的博客
    
    
    










