【发布时间】:2019-01-08 17:57:30
【问题描述】:
我正在开发一个多租户 ASP.NET MVC 应用程序。 我有一个主数据库数据库,其中包含所有租户的信息,然后每个客户都将拥有他们的定制数据库,用于他们的个人交易。
主数据库已生成用于身份/登录的 ASP.net 表和一个名为 tb_CustomerAccount 的表。
在 dbo.ASPNetUsers 表中,我添加了一个名为 AppUserID 的列,它是 tb_CustomerAccount 表的外键。
这个表有字段 应用用户 ID, 数据库名称, SQL_Server, 用户身份, 密码
当用户登录时,系统将识别用户并查找他们的数据库并将用户连接到他们的应用程序界面。
现在这在我的本地机器上工作正常,但是当我托管应用程序时,我收到错误“无效的对象名称'dbo.AspNetUsers'”。 解决问题,似乎登录正在查看演示租户数据库以获取登录详细信息而不是主数据库,我不知道为什么会这样,
private Master_DatabaseEntities db = new Master_DatabaseEntities();
[Authorize]
public ActionResult Index()
{
string userID;
string CustomerDatabase;
long CusID;
userID = Convert.ToString(User.Identity.GetUserId());
AspNetUser aspNetUser = db.AspNetUsers.Find(userID);
CusID = Convert.ToInt64(aspNetUser.CustomerID);
LogIn_userID = aspNetUser.Id;
CustomerName = aspNetUser.ussCustomerAccount.Name;
CustomerDatabase = aspNetUser.ussCustomerAccount.Database;
ussCustomerAccount ussCustomerAccount = db.ussCustomerAccounts.Find(CusID);
var db_Connection_Details = new DynamicModel.DataContext(ussCustomerAccount.Server, ussCustomerAccount.Database, ussCustomerAccount.User, ussCustomerAccount.Password);
return View();
}
数据库上下文:
public class DataContext : DbContext
{
public DataContext(string server, string database, string user, string password)
: base ("metadata=res://*/Models.DemoCompanyDB.csdl|res://*/Models.DemoCompanyDB.ssdl|res://*/Models.DemoCompanyDB.msl;provider=System.Data.SqlClient;provider connection string='data source=" + server + ";initial catalog=" + database + ";user id=" + user + ";password=" + password + ";MultipleActiveResultSets=True;App=EntityFramework'")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<xxx> xxx
{
get;
set;
}
public virtual DbSet<xxx> xxx
{
get;
set;
}
public virtual DbSet<xxx> xxx
{
get;
set;
}
【问题讨论】:
-
你是如何定义 Master_DatabaseEntities 的
-
-
@TomtemmAzong
Master_DatabaseEntities连接字符串,初始目录应为Master_Database而不是DemoCompany -
@MohsinMehmood,你是对的,输入错误,初始目录是 Master_Database。
-
Demo_Company 数据库是通过动态连接字符串访问的,如上面的 DbContext 代码块所示
标签: asp.net-mvc entity-framework iis