【问题标题】:How to choose from two connection strings?如何从两个连接字符串中进行选择?
【发布时间】:2011-12-24 15:27:51
【问题描述】:

下午好,我在使用 C# 和 Linq to Entities 从两个连接字符串中进行选择时遇到了问题。目前我有两个连接字符串:

<add name="GameHutDBEntities1" connectionString="metadata=res://*/GameHutModel.csdl|res://*/GameHutModel.ssdl|res://*/GameHutModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=EMMANUEL-PC\SQLEXPRESS;Initial Catalog=GameHutDB;user id=GameHutAdmin; password=123;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
<add name="GameHutDBEntities2" connectionString="metadata=res://*/GameHutModel.csdl|res://*/GameHutModel.ssdl|res://*/GameHutModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=EMMANUEL-PC\SQLEXPRESS;Initial Catalog=GameHutDB;user id=test; password=1234;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

我有两个角色,即管理员和文员。如何让管理员使用第一个连接字符串登录,而店员将使用第二个连接字符串登录?

【问题讨论】:

标签: c# asp.net linq-to-entities


【解决方案1】:

改编自this answer

string connString;

if(IsAdmin(user))
    connString = ConfigurationManager.ConnectionStrings["GameHutDBEntities1"];
else
    connString = ConfigurationManager.ConnectionStrings["GameHutDBEntities2"];

using(EntityConnection con = new EntityConnection(connString))
{
  using (Entities context = new Entities(con))
  {
      // Some code here
  }
}

IsAdmin 是一个函数,它接受 user,如果他是管理员则返回 true,否则返回 false。

【讨论】:

  • 我正在使用三层模型,请问我需要把这段代码放在哪里?并感谢您回答我的问题!
  • @user1114676 - 这将在数据访问层中,尽管我会通过 UI 作为依赖项传递连接字符串(或指示用户是否为管理员的布尔值)(您 不想将ConfigurationManager的依赖硬编码到你的数据访问层中。
  • 配置管理器在数据层不被识别,请问有办法在数据层使用吗?
  • @user1114676 - 它是System.Configuration 命名空间的一部分。您可以添加程序集并在需要使用它的地方导入命名空间。但是,我不建议这样做 - 您将硬编码对配置的依赖项到您的数据访问层中。
  • @user1114676 - 那么你做错了什么。你确定你的配置有你正在使用的名称的连接字符串吗?您是否使用了正确的配置?
【解决方案2】:
var conn = new EntityConnection();
conn.StoreConnection.ConnectionString = ConfigurationManager.ConnectionStrings["GameHutDBEntities2"];

this.Entities = new KurtDBEntities(conn);

【讨论】:

  • 我正在使用三层模型,请问我需要把这段代码放在哪里?并感谢您回答我的问题! ——
  • 无论您在哪里实例化您的实体,只需将连接作为参数传递。
  • 是的,那个。只需将连接传递给构造函数。
  • 查看我的编辑,所有代码都是 C#。但是,如果用户是管理员,您需要制定逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多