N DataContexts가 있어야하는 프로젝트를 빌드하고 있습니다. App-Start (Global.asax)에서 아래 단계를 수행 할 웹 응용 프로그램이 있습니다..NET Entity Framework 코드 첫 마이그레이션 - 데이터베이스 연결 오류
1 - 데이터베이스가 없으면 만듭니다. 2 - 데이터베이스를 최신 마이그레이션으로 업데이트하십시오.
처음으로 응용 프로그램을 실행할 때 (데이터베이스가 아직 생성되지 않은 경우) "데이터베이스를 열 수 없습니다"라는 로그인이 DB_NAME을 열 수 없습니다. 로그인하지 못했습니다 .. 'sa'사용자가 로그인하지 못했습니다. . "
좋아, 그래서 지금은 내가 databse 확인하고 만들어집니다,하지만 __Migrations 테이블이 없습니다.
응용 프로그램을 중지하고 다시 실행하면 예외가 throw되지 않고 데이터베이스가 성공적으로 업데이트됩니다.
필자는 연결 문자열에 영구 보안 정보를 설정하려고했지만 아무것도 변경하지 않았습니다.
내 코드는 다음과 같습니다 : 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을 실행하면 그냥 기억 (내가 한 테스트를 정의하는 초기 마이그레이션이 다른 마이그레이션과 함께 테이블 및 항목 생성). 응용 프로그램이 처음 실행되고 데이터베이스가 존재하지 않는 경우에만 예외가 throw됩니다.
Ive도 마이그레이션 업데이트 코드를 실행하기 전에 Database.SetInitializer 및 context.CreateIfNotExist()를 호출하려고했습니다.
편집 :
는 필자는 기본적으로 응용 프로그램이 연결 문자열에 지정된 초기 카탈로그에 연결을 시도, SQL 서버 로그를 확인하지만 존재하지 않습니다. excpetion이 던져지면 데이터베이스가 생성되고 온라인 상태가됩니다.
편집 :
i는 초기 카탈로그 속성을 제거하면 그것은 작동하지만 다음 내가 마스터 데이터베이스에서 테이블을 만드는 내 모든 dataContexts있을 것입니다.
우리는 N 서버 인스턴스가 여전히 컨텍스트하지만 메신저는 여전히 같은 SQL 인스턴스를 확인