如果不重新启动应用程序,则创建数据库

时间:2015-08-11 20:51:13

标签: asp.net entity-framework asp.net-web-api entity-framework-6

我正在项目中创建动态连接字符串。它们是在飞行中创建的,其中包含专门为每个用户提供的信息。当应用程序首次启动时,如果数据库不存在(第一次用户登录),则会创建一个新数据库而不会出现此初始化程序的问题:

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创建一个错误,并且应用程序根本无法启动...

1 个答案:

答案 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