.NET 核心 - 将连接字符串读入 Entity Framework 核心

.NET core - read connection string into Entity Framework Core

我的项目结构很标准:

EFData 内。

EFData 是一个 Entity Framework 核心 class 库,它隔离了所有数据库交互。数据库模型,以及我的 DBContext。我以这种方式构建它,因此它与数据库环境无关。

API项目当然参考了EFData

如何将连接字符串从 API 中的 Startup.cs 传递到 EFData 中的 DBContext.cs

我读过多篇文章,其中提到的设置与我的设置不同,我可能希望在我的 EFData 项目中使用 Startup.cs。我没有那个。

Startup.cs 内,我确实有我认为是必需的行 -

services.AddDbContext<DBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

但是EFData对该连接字符串一无所知。

获取连接和建立数据库的步骤

  1. 在 API 项目中添加对 EFData 项目的引用 - 通过在 API 项目,单击依赖项部分并添加 引用您的 EFData class 库。
  2. 然后添加到 api 项目中的启动 class 并确保连接字符串在您的 ConfigureServices 方法或类似方法中

您的连接字符串看起来不错,只需确保您的数据库连接字符串正确即可。

Here 是 link 如果您需要更多信息

一种方法是在 DBContext.cs class 中添加一个 ConnectionString 属性,然后在 API 项目的 startup.cs 中显式设置它。 在DBcontext.cs

中添加如下代码
   using System;
   using System.Data.SqlClient;

   using Microsoft.EntityFrameworkCore;

   public class DBContext 
   {
       public static void SetConnectionString(string connectionString)
       {
           if (ConnectionString == null)

           {
               ConnectionString = connectionString;
           }
           else
           {
               throw new Exception();
           }
       }
       // this part will help you to open the connection
       public static SqlConnection OpenConnection()
       {
           SqlConnection connection = new SqlConnection(ConnectionString);
           connection.Open();
           return connection;
       }

       private static string ConnectionString { get; set; }

       //add the connectionString to options

         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
       {
           if (!optionsBuilder.IsConfigured)
           {
               optionsBuilder.UseSqlServer(ConnectionString);
           }
       }
   }

现在,在 API 项目中添加 EFData 项目的引用,并在 startup.cs 文件中设置 ConnectionString

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            var connectionString = this.Configuration.GetConnectionString("DBName");
            Namespace.DBContextContext.SetConnectionString(connectionString); //replace namespace with the namespace suitable for your solution

            //here goes rest of your default code
        }

这样您应该能够访问您的 API 项目中的连接。