首页 > 解决方案 > 托管应用程序时显示无效的对象名称“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;
    }

标签: asp.net-mvcentity-frameworkiis

解决方案


问题出在 Master_Database 连接字符串上。如@MohsinMehmood 所示,Connectionstring 指向 DemoCompany 而不是 Master_Database。

希望这会帮助有类似任务的人。谢谢


推荐阅读