gpt4 book ai didi

c# - Asp.Net MVC 中的 Entity Framework

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:06 25 4
gpt4 key购买 nike

我的 ASP.Net MVC 应用程序必须在运行时连接到多个数据库。我可以重载我的类以在运行时接受连接字符串,如下所示

class MyClassDBContext:DbContext
{
public MyClassDBContext(string str) : base(str)
{
this.Database.Connection.ConnectionString = str;
}
}

目前,我正在从数据库表中检索此连接字符串。我的工作流程如下

  1. 网站使用存储在中的凭据连接到默认数据库网络配置
  2. 网站查询默认数据库以获取连接字符串其他数据库。
  3. 网站通过提供连接来连接到其他数据库运行时的字符串

我现在面临的问题是保持我的代码干净。每次我需要 2 号数据库的连接字符串时,我都必须在默认数据库中查找它。有没有更清洁的方法来做到这一点?我考虑过将连接字符串存储在配置文件数据中,但我不确定这是否是个好主意。我网站的每个用户都需要连接到最多 2-3 个不同的数据库,具体取决于他们的凭据。

最佳答案

我会亲自将所有连接字符串放在您的 App.Config 文件中,并使用简单的 IOC 实现。

实际上,Nuget 的 ninject 包可能非常适合您的需求。

不过这就是我的意思。希望这能让你的代码干净。我在之前的项目中使用了完全相同的模式,效果很好。

您可以更进一步,创建一个服务定位器并在您的 global.asax 中注册服务。让我知道你是否感兴趣。另请查看 ninject。

public interface IService() 
{
string GetConnectionString();
void DoStuff();
}

public class DBServiceOne : DbContext, IService
{
protected string GetConnectionString()
{
return ConfigurationManager.AppSettings["DBServiceOneConnectionString"]
}

public DBServiceOne(string str) : base(str)
{
this.Database.Connection.ConnectionString = GetConnectionString()
}

public void DoStuff() { //logic goes here }
}

public class DBServiceTwo : DbContext, IService
{

public DBServiceTwo(string str) : base(str)
{
this.Database.Connection.ConnectionString = GetConnectionString();
}


protected string GetConnectionString()
{
return ConfigurationManager.AppSettings["DBServiceTwoConnectionString"]
}

public void DoStuff() { //logic goes here }
}

public class DBServiceThree : DbContext, IService
{

public DBServiceThree(string str) : base(str)
{
this.Database.Connection.ConnectionString = GetConnectionString();
}

protected string GetConnectionString()
{
return ConfigurationManager.AppSettings["DBServiceThreeConnectionString"]
}

public void DoStuff() { //logic goes here }
}

现在开始实现——在你的 Controller 上使用构造函数注入(inject)

//This could be in your home controller

public class HomeController : AsyncController
{
private IService DBOneService;
private IService DBTwoService;
private IService DBThreeService;

public HomeController(IService one, IService two, IService three)
{
DBOneService= one;
DBTwoService = two;
DBThreeService = three;
}

public HomeController() : this(new DBServiceOne(), new DBServiceTwo(), new DBServiceThree()) {}

public ActionResult Index() {
DBOneService.DoStuff(); //here you'd want to return a list of data and serialize down with json or populate your razor template with it. Hope this helps!

}

关于c# - Asp.Net MVC 中的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com