asp.net-mvc - 托管应用程序时显示无效的对象名称“dbo.AspNetUsers”
问题描述
我正在开发一个多租户 ASP.NET MVC 应用程序。我有一个主数据库数据库,其中包含所有租户的信息,然后每个客户都将拥有他们的定制数据库,用于他们的个人交易。
主数据库生成了用于身份/登录的 ASP.net 表和一个名为 tb_CustomerAccount 的表。
在 dbo.ASPNetUsers 表中,我添加了一个名为 AppUserID 的列,它是 tb_CustomerAccount 表的外键。
此表包含字段 AppUserID、DatabaseName、SQL_Server、UserID、Password
当用户登录时,系统将识别用户并查找他们的数据库并将用户连接到他们的应用程序界面。
现在这在我的本地机器上工作正常,但是当我托管应用程序时,我收到错误“无效的对象名称'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_Database 连接字符串上。如@MohsinMehmood 所示,Connectionstring 指向 DemoCompany 而不是 Master_Database。
希望这会帮助有类似任务的人。谢谢
推荐阅读
- puppet - 访问代理上受信任['extensions'] 中的 CSR 扩展
- graphql - 如何在 Graphql-java 中实现自定义标量?
- angularjs - 无法在服务器中传递对象
- vue.js - vuetify.js 如何获得 v-container 的全宽
- java - 当 javarx2 Flowable subscribesOn Schedulers.computation 如果任务超过线程池大小会发生什么
- ios - 更改 UINavigationController 颜色和字体
- pandas - 如何在 Python 中合并两个不同长度的数据集?
- android - 如何为各种列表视图项打开不同的 XML?
- ruby-on-rails - 如何在 Rails 中使用丰富的连接表
- curl - Openshift (curl):从容器中获取对主 API 的访问权限