.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
对该连接字符串一无所知。
获取连接和建立数据库的步骤
- 在 API 项目中添加对 EFData 项目的引用 - 通过在
API 项目,单击依赖项部分并添加
引用您的 EFData class 库。
- 然后添加到 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 项目中的连接。
我的项目结构很标准:
在 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
对该连接字符串一无所知。
获取连接和建立数据库的步骤
- 在 API 项目中添加对 EFData 项目的引用 - 通过在 API 项目,单击依赖项部分并添加 引用您的 EFData class 库。
- 然后添加到 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 项目中的连接。