建立一个应该有N个DataContexts的项目。 我有一个web应用程序,将执行以下步骤中的应用程序开始(Global.asax):.NET实体框架代码优先迁移 - 数据库连接错误
1 - 如果数据库不存在,创建。 2 - 将数据库更新到最新的迁移。
当我第一次运行应用程序(数据库尚未创建)时,我得到一个执行选项“无法打开数据库”DBName“请求登录。登录失败。 用户登录失败'sa' “。
好的,所以在这一刻我检查数据库并创建它,但__Migrations表不存在。
如果我停止应用程序并再次运行该应用程序,则不会抛出异常并且数据库已成功更新。
我试着在连接字符串中设置持久安全信息,但没有任何变化。
我的代码如下: 的Global.asax
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Bll.AppStart.Databases.Start();
}
调用..
namespace BusinessLogicLayer.AppStart
{
/// <summary>
/// Inicialização e Update de versão dos bancos de dados do sistema
/// </summary>
public static class Databases
{
public static void Start()
{
//Iniciar DBCore
DataBaseStart<DataAccessLayer.DataContexts.Core.Context,
DataAccessLayer.Migrations.Core.Configuration>();
}
#region Inicializar bancos de dados
private static void DataBaseStart<T, TC>()
where T : DbContext, new()
where TC : DbMigrationsConfiguration<T>, new()
{
//Atualiza a base de dados com base na configuração do migrations
try
{
var migratorConfig = new TC();
var dbMigrator = new DbMigrator(migratorConfig);
dbMigrator.Configuration.AutomaticMigrationDataLossAllowed = false;
dbMigrator.Update();
}
catch (Exception)
{
//Exceção quando cria o banco a primeira vez?
throw new Exception("Banco de dados criado pela primeira vez. Reinicie a aplicação.");
}
}
#endregion
}
}
我的上下文类..注意到它定义了一个空数据库
public class Context : DbContext
{
public Context()
{
Database.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["PODBCore"].ConnectionString;
}
public Context(string connectionString)
{
Database.Connection.ConnectionString = connectionString;
}
}
我的迁移配置类
public sealed class Configuration : DbMigrationsConfiguration<DataContexts.Core.Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
}
protected override void Seed(DataContexts.Core.Context context)
{
// This method will be called after migrating to the latest version.
}
}
我有一个定义的空模型
public partial class Initial : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
只是要记住,如果我跑两次数据库已成功创建并更新aplication(我做测试初始迁移与其他迁移,创建表和东西)。 异常仅在应用程序首次运行时抛出,并且数据库不存在。
我还试图在运行迁移更新代码之前调用Database.SetInitializer和context.CreateIfNotExist()。
编辑:
伊夫检查SQL Server日志,基本的应用程序试图连接到连接字符串中指定初始目录,但它不存在。在引发异常之后,数据库被创建并在线。
编辑:
如果我删除初始目录属性它将工作,但我有我的所有dataContexts创建在主数据库中的表。
我们可以有N个服务器实例,仍然有某种上下文,但我还在试图让一个目录上下文在同一个SQL实例