Pregunta

Estoy teniendo un problema al intentar ejecutar mi proyecto cada vez que se construye. Parece que las carreras de inicializador, pero cuando se trata de la primera consulta. - muere con la siguiente InvalidOperationException

This operation requires a connection to the 'master' database. Unable to create a
connection to the 'master' database because the original database connection has
been opened and credentials have been removed from the connection string. Supply
an unopened connection.

A modo de referencia, estoy usando el Código EF Primera CTP4, importada directamente con NuGet. Conexión con un servidor SQL 2008 R2

Lo que quiero que suceda es para volver a crear la base de datos si hay modificaciones de modelos y la semilla que con unos valores de la tabla de búsqueda. Ambas cosas parecen estar soportadas * fuera de la caja.

Mi configuración es de esta manera:

Global.asax

 protected void Application_Start()
 {
    Database.SetInitializer<CoreDB>(new CoreDBInitialiser());
    // et al...
 }

CoreDB.cs

public class CoreDB : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> Logins { get; set; }
    public DbSet<Permission> Permissions { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<RolePermission> RolePermissions { get; set; }
    public DbSet<UserRole> UserRoles { get; set; }
    public DbSet<Setting> Settings { get; set; }
}

public class CoreDBInitialiser : RecreateDatabaseIfModelChanges<CoreDB>
{
    protected override void Seed(CoreDB context)
    {
        var settings = new List<Setting>
        {
            new Setting
            {
                SettingName = "ExampleSetting",
                SettingValue = "This is a sample setting value",
            }
        };

        settings.ForEach(d => context.Settings.Add(d));
    }
}

Cuando se ejecuta, se muere en una línea similar a esta, que es básicamente la primera consulta que viene a través de después de crear la base de datos.

User data = (from u in _data.Users where u.Username == userName  select u).SingleOrDefault();

Las cosas no creo que es:

  • No es permisos : He eliminado la base de datos en sí dentro del SQL Server. La aplicación recrea la vuelta alrededor del mismo tiempo que la consulta se trató de ejecución (el inicializador se establece, entonces, evidentemente, mantiene a raya la creación hasta que sea necesario). También he iniciado sesión en SQL Server como el usuario que se especifica en mi Web.config y tienen acceso completo de lectura / escritura a la base de datos. De hecho, es probable que deben hacer como que cuenta crea las bases de datos también.
  • Se está creando la base de datos . La eliminación de la base de datos y se recrea de forma automática fina
  • La cadena de conexión se define correctamente , incluyendo el atributo providerName.

<add name="CoreDB" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TheDatabase;User Id=TheUsername;Password=ThePassword;" providerName="System.Data.SqlClient" />

  • No aparecerá de un error en mi código / lógica, ya que una vez que la consulta no ha logrado con éxito, el código se iniciará correctamente hasta la próxima vez que la aplicación se reconstruye . Es obvio que podría ser, y es probable que tendría que aplicar una en torno al trabajo en mi código no importa lo que de todos modos. :)

¿Qué hacer?

Lo ideal es que me gustaría "no pensar en el esquema de base de" mucho. Me gustaría que fuera lo que parecía estar en de Scott Gu excelente entrada en el blog (y seguimiento de trabajar con bases de datos existentes ), donde las cosas sólo funcionó y desaparecieron de distancia. En su mayor parte esto es cierto. Parece ser un problema con la conexión no se han cerrado en algún momento, pero no puedo encontrar la manera de corregir este problema.

pocos foro < mensajes / a> / SO hacer implica el problema que estoy teniendo es básicamente porque los inicializadores no están funcionando exactamente según lo previsto y la conexión pueden dejarse abiertas. La solución en otros lugares parece ser simplemente "no crear su propia inicializador", que no es la mejor solución -. Pero a menos que alguien tiene alguna idea, que probablemente tendrá que hacer hasta CTP5 tal vez

* Sí, ya sé que es una CTP, por lo que "apoyado" probablemente no es la palabra:)

Otros consejos

Como solicitó Estoy publicar mi comentario como respuesta.

Mi solución fue muy similar a bizon donde el Trusted_Connection y persistir Información de Seguridad necesitan corrección, pero que logra a través de las propiedades de Visual Studio, vaya a:

Explorador de servidores -> Modificar conexión -> Avanzado -> A continuación, compruebe tanto Persiste Info Security y < strong> trustServerCertificate como verdadero, y se formatea la cadena de conexión correctamente

captura de pantalla de GUI estudio visual

Sólo se encuentra con este problema mientras sigo este bajo VS2012 y EF6. Mi solución es bastante simple:

En el cuadro de diálogo Propiedades de conexión, que aparece al elegir "ingeniería inversa Código primero", de verificación "Guardar contraseña".

Problema resuelto, pero no sé los detalles sobre él ...

Agregue esto a su cadena de conexión. Se trabajó para mí.

Integrated Security=True;Persist Security Info=True;

he podido conseguir que esto funcione como quería. Esta respuesta es un bodge / opt-out, por lo que tener en cuenta al tomar su decisión sobre qué hacer.

he vuelto lejos de Código-Primera para el mientras tanto hasta que sea en una versión más estable. Para cualquier persona que está teniendo este problema con la CTP4 así, entonces usted puede conseguir alrededor de él por la pérdida de su inicializador y pasando NULL en el método SetInitializer.

Database.SetInitializer<CoreDB>(null);

Este curso de los medios que necesita para mantener su base de datos cada vez que realice un cambio, o cambiarlo por una sola carrera y luego cambiarlo de nuevo después de que se crea la base de datos.

Nunca ha escrito antes, el aprendizaje de Entity Framework utilizando MVC, utilizando 2010 y un servidor de base de datos dev que ejecuta SQL Server 2005 para la base de datos. Soy sobre todo un chico ventanas aplicación.

La primera parte del tutorial fue bien, creó las tres tablas hasta el momento, entonces me encontré con el error anterior después de añadir algunas más clases y la strucure base de datos necesaria para el cambio.

Mi solución fue bastante brutal, fui en el servidor dev y entró en mi entrada y yo soy un administrador de sistemas en mi propio servidor, no es sorprendente. Así que entré en usermapping y master seleccionado y simplemente todo era bueno. Ahora funciona.

No sé por qué esto ha funcionado o lo que es el problema, pero es de esperar que alguien que sabe más que yo puedo aprovechar este 'mal arreglo' y que sea mejor para otras personas que tienen este problema.

Yo tenía una contraseña incorrecta. Extrañamente redactado excepción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top