[英].NET core - read connection string into Entity Framework Core
我的项目结构非常标准:
在EFData
。
EFData
是一个 Entity Framework Core 类库,它隔离了所有数据库交互。 数据库模型和我的DBContext
。 我以这种方式构建它,因此它与数据库环境无关。
API 项目当然有对EFData
的引用。
如何将连接字符串从API
Startup.cs
传递到DBContext.cs
中的EFData
?
我阅读了多篇文章,这些文章引用的设置与我的设置不同,我可能希望在我的EFData
项目中使用Startup.cs
。 我没有那个。
在Startup.cs
,我确实有我认为需要的行 -
services.AddDbContext<DBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
但是EFData
对该连接字符串一无所知。
一种方法是在 DBContext.cs 类中添加 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 项目中的 Connection。
获取连接和构建数据库的步骤
您的连接字符串看起来不错,只需确保您的数据库连接字符串正确即可。
如果您需要更多信息, 这里是一个链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.