是否可以将ApplicationDbContext的连接字符串从Web.config移动到某个数据库并将其存储为:
并根据在登录页面中输入的用户名从数据库中读取? 我尝试了几件事,但都失败了。 我知道如何动态设置连接字符串,但是我的主要问题是在显示“登录”页面之前创建了ApplicationDbContext,并且我无法获取用户数据来搜索数据库中的connstring。 是否可以通过单击“登录”而不是Startup.cs来调用StartupAuth(app)?
我想要达到的目的: 我想拥有一个带有数据库的IIS。该数据库用于指向登录用户的特定IP地址(SQL服务器)。
更新
这是我的模型第一个EF实体类的代码:
public advokatEntities() : base(GetConnectionString())
{
}
public static string GetConnectionString()
{
if (HttpContext.Current.Session["advokatEntities"] != null)
{
return HttpContext.Current.Session["advokatEntities"].ToString();
}
else
{
using (redirectionEntities db = new redirectionEntities())
{
string companyName = "ines";
string server = db.redirections.Where(x => x.company == companyName).FirstOrDefault().adress;
string providerConnectionString = string.Format("server={0};user id=root;password=K0r1sn1k12345;persistsecurityinfo=True;database={1}", server,companyName);
var efConnection = new EntityConnectionStringBuilder();
efConnection.Provider = "MySql.Data.MySqlClient";
efConnection.ProviderConnectionString = providerConnectionString;
efConnection.Metadata = "res://*/Models.Advokat.csdl|res://*/Models.Advokat.ssdl|res://*/Models.Advokat.msl";
HttpContext.Current.Session["advokatEntities"] = efConnection.ToString();
return efConnection.ToString();
}
}
}
这有效,我只需要将字符串 companyName 更改为用户在登录时输入的内容即可。这不是什么大问题,我认为可以做到...
当我尝试使用Identity的ApplicationDbContext执行此操作时遇到了一个问题
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base(GetConnectionString())
{
}
public static string GetConnectionString()
{
return "server=192.168.1.122;userid=root;password=K0r1sn1k12345;database=ines;persistsecurityinfo=True";
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
}
我尝试将连接字符串放入会话中,但它返回null,因为在创建ApplicationDbContext时没有会话。 我可以通过在登录页面中将companyName作为参数传递来以某种方式从redirectionEntities读取连接字符串吗?
理想的情况是:
这完全可以实现吗?还是将所有用户数据移动到redirectionEntities数据库会更容易?