Я работаю над мультитенантным приложением ASP.NET MVC.
У меня есть основная база данных, содержащая информацию для всех арендаторов, и у каждого Клиента будет своя собственная база данных для личных транзакций.
Основная база данных сгенерировала таблицы ASP.net для идентификации / входа и таблицу с именем tb_CustomerAccount.
В таблице dbo.ASPNetUsers я добавил столбец AppUserID, который является внешним ключом таблицы tb_CustomerAccount.
эта таблица имеет поля
AppUserID,
DatabaseName,
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();
}
DbContext:
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;
}