将 Entity Framework Core 集成到类库中(.NET 标准)

Cha*_*era 3 c# asp.net entity-framework-core asp.net-core

我在单个解决方案中有一个 ASP.NET Core Web 应用程序和一个类库项目。我的目的是仅使用 .NET Core Web 应用程序作为 Web 应用程序,而不是用作数据层。我创建了单独的类库项目,其唯一目的是创建与数据库交互的实体类。我已将实体框架核心库包含到类库项目中。

  1. 如何包含多个配置文件(基于环境,例如appsettings.development.jsonappsettings.production.json)并根据我设置的环境读取这些值?

  2. 如何DbContext在类库中注册该类,就像在下面的 ASP.NET Core Web 应用程序中一样?

Startup这是我的 ASP.NET Core Web 应用程序类的片段

public void ConfigureServices(IServiceCollection services)
{
    var connString = Configuration.GetConntectionString("ConnectionStringKey");

    services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connString));

    // other service configuration
}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的意见。

Xin*_*hen 5

将这些包添加到您的类库中。

 <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
 <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
 <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
Run Code Online (Sandbox Code Playgroud)

创建静态类来注册DbContext

public static  class ISserviceCollectionExtension
    {
        public static IServiceCollection configureservice(this IServiceCollection service, IConfiguration Configuration)
        {
            //access the appsetting json file in your WebApplication File

            string filePath = @"C:\your Web App path\appsettings.json";

            Configuration = new ConfigurationBuilder()
               .SetBasePath(Path.GetDirectoryName(filePath))
               .AddJsonFile("appSettings.json")
               .Build();

            service.AddDbContext<AppDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("xxx")));
            return service;
        }
    }
Run Code Online (Sandbox Code Playgroud)

日期上下文

 public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {

        }
    
        public DbSet<xx> xx{ get; set; }
        //.......
    }
Run Code Online (Sandbox Code Playgroud)

当你添加迁移时,你可能会得到这样的错误:

在此输入图像描述

现在您需要创建 DbContextFactory 类

public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
    {
        public AppDbContextFactory()
        {

        }

        private readonly IConfiguration Configuration;
        public AppDbContextFactory(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public AppDbContext CreateDbContext(string[] args)
        {

            string filePath = @"C:\Users\Administrator\source\repos\CheckPoint\NullMVC\appsettings.json";

            IConfiguration Configuration = new ConfigurationBuilder()
               .SetBasePath(Path.GetDirectoryName(filePath))
               .AddJsonFile("appSettings.json")
               .Build();


            var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
            optionsBuilder.UseSqlServer(Configuration.GetConnectionString("xxx"));

            return new AppDbContext(optionsBuilder.Options);
        }
    }
Run Code Online (Sandbox Code Playgroud)

最后,您可以在类库中成功注册并迁移DBContext。

第一个问题,你可以参考这个问题