建立一個應該有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實例