我问过这个问题What is the best way to dynamic load connection strings
但也许最好问这个问题有点不同。
我有一个CRM解决方案,每个公司都有不同的SQL数据库,但我想尝试只有一个IIS站点,因为除了Web.config文件中的SqlConnectionString之外,站点总是相同的。我使用LinqToSql并使用VS2008中的工具自动生成类。这意味着我有自动生成的DataClasses。我发现这个类从这行中的web.config读取连接字符串:
public DataClassesDataContext() :
base(global::System.Configuration.ConfigurationManager
.ConnectionStrings["TheConnectionString"].ConnectionString,
mappingSource)
{
OnCreated();
}
用户都登录到我希望对AD进行审核的同一个IIS站点,然后将它们重定向到CRM站点,当我这样做时,我想动态获取正确的ConnectionString并使Linq类使用它。
我是否在正确的轨道上实现这一目标?如果是这样,我如何实现为linq类加载连接字符串动态,找到上面代码的文件是自动生成的,并在每次编译时删除。
有什么想法吗?
答案 0 :(得分:2)
如果在linqmetal desinger中点击它然后在sql连接的属性窗口中设置为空白,那么你可以这样做,所以自动生成不会让你编写代码。 然后为datacontex创建部分类,然后通过自己的示例创建此构造函数:
public partial class DataClassesDataContext
{
public DataClassesDataContext()
: base(StaticMethodThatYouDoLogicForConnStringDecision(), mappingSource)
{
}
}
答案 1 :(得分:1)
对于ADO实体和Linq-toSQL,(生成的)datacontext类都有一个接受ConnectionString的重载。
因此,每次创建上下文时都必须添加几个步骤:
string myConnectName = Lookup[Session.ConnectName]; // or something
var rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
var connString = rootWebConfig.ConnectionStrings.ConnectionStrings[myConnectName];
var context = new MyDataContext(connString.ConnectionString);