我正在项目中创建动态连接字符串。它们是在飞行中创建的,其中包含专门为每个用户提供的信息。当应用程序首次启动时,如果数据库不存在(第一次用户登录),则会创建一个新数据库而不会出现此初始化程序的问题:
public DataContext() : base()
{
// ProxyCreation and LazyLoading doesn't affect the situation so
// comments may be removed
//this.Configuration.LazyLoadingEnabled = false;
//this.Configuration.ProxyCreationEnabled = false;
string conStr = GetDb();
this.Database.Connection.ConnectionString = conStr;
}
问题是,使用此方法,我必须重新启动服务器上的应用程序池,新用户应该是该应用程序的第一个访问者。
我需要同样的东西而不需要重新启动应用程序。这可能吗?
(这是在MVC视图上使用AngularJS而在WebApi上使用数据提供者的SPA - 可能会以某种方式相关,所以我想应该提一下)
我已经尝试了this,但是这会为EF创建一个错误,并且应用程序根本无法启动...
答案 0 :(得分:0)
您可以尝试使用一种不同的方法直接连接(并创建)正确的数据库。
public class DataContext : DbContext
{
public DataContext(DbConnection connection) : base(connection, true) { }
}
在这里,您已经使用正确的连接创建了DbContext。
请注意,因为您需要指定应该使用正确连接的迁移(不是Web.Config连接,而是引发数据库创建的连接)。 请在此处查看第二次重载https://msdn.microsoft.com/en-US/library/hh829099(v=vs.113).aspx#M:System.Data.Entity.MigrateDatabaseToLatestVersion。