我工作的一个MVC3应用数据库第一种方法。 我想用一个连接字符串来连接数据库的基础上,一些字符串(公司名称)。 例如:我在MSSQL快递2012此DB:my_database_microsoft,my_database_oracle等..(这些数据库具有相同的结构)。 在登录页面,我有3个输入字段:用户名,密码,公司。 我知道如何建立连接字符串动态与SqlConnectionStringBuilder,然后用它在EntityConnectionStringBuilder
string providerName = "System.Data.SqlClient";
string serverName = "MY-PC\\SQL2012";
string databaseName = "my_database_"+form[company].toString();
.....
.....
entityBuilder.Provider = providerName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;
// Set the Metadata location.
entityBuilder.Metadata =@"res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl";
using (EntityConnection conn =
new EntityConnection(entityBuilder.ToString()))
{
conn.Open();
// Console.WriteLine("Just testing the connection.");
conn.Close();
}
obracun_placEntities1.nameOrConnectionString = entityBuilder.ToString();
obracun_placEntities1 o = new obracun_placEntities1(entityBuilder.ToString());
我已经做了部分类我entety,并给予一个构造函数,采取nameOrConnectionString字符串作为参数。
public partial class obracun_placEntities1
{
public string nameOrConnectionString { get; set; }
public obracun_placEntities1(string nameOrConnectionString)
: base(nameOrConnectionString ?? "obracun_placEntities1") { }
}
这仅适用于LoginController中,但我怎么能我使用obracun_placEntities1 DB =新obracun_placEntities1(),其中使用在UsersController和所有其他控制器; >此采取默认的数据库从web.config中。 我不希望连接字符串保存到会话或Cookie及比它传递在每一个CONTROLER作为参数。 private obracun_placEntities1 db = new obracun_placEntities1();
我怎样才能做到这一点我通过在登录控制器连接字符串,并使用在整个项目中该数据库。
还有一个问题发生时,我想用公共静态字符串nameOrConnectionString并将它传递给构造函数。 问题是,当我在Chrome中打开应用程序和登录的user1的我从user1的数据库中的所有infromation,但后来我在MS Explorere因为user2的登录并获得来自user2的数据库中的所有数据。 当我刷新铬我从user2的数据库没有user1的信息。
Model1.context.cs
public partial class obracun_placEntities1 : DbContext
{
public static string nameOrConnectionString { get; set; }
// public static string connection;
public obracun_placEntities1()
: base(nameOrConnectionString ?? "obracun_placEntities1")
{
}