2012-06-18 10 views
10

Estoy intentando utilizar Code First con mi instancia local de Sql Server 2008 R2. Creé un usuario 'dev' y puedo iniciar sesión y crear bases de datos usando Sql Managment Studio. El problema es que sigo recibiendo un mensaje de error cuando intento crear una base de datos usando DbContext en EntityFramework. Aquí está el mensaje de error:Código de Entity Framework Primer error "Error al localizar el servidor/instancia especificada"

"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified"

El mensaje de error Revisé mi SQL Server y sí permite conexiones remotas.

he abstraído mi sistema con el siguiente código y obtener el mismo error:

namespace CodeFirstConsole 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      var db = new MyContext(); 
      try { Console.WriteLine(db.Parents.Count()); } 
      catch (Exception) { throw; } 
      Console.Read(); 
     } 
    } 

    internal class MyContext : DbContext 
    { 
     public DbSet<ParentObject> Parents { get; set; } 
     public DbSet<ChildObject> Children { get; set; } 

     public MyContext() 
     { 
      this.Database.Connection.ConnectionString = 
       "Data Source=.;Database=ConsoleTest;Initial Catalog=ConsoleTest;User ID=dev;Password=dev;"; 
     } 
    } 

    internal class ParentObject 
    { 
     public int Id { get; set; } 
     public string PropertyOne { get; set; } 
    } 

    internal class ChildObject 
    { 
     public int Id { get; set; } 
     public bool PropertyOne { get; set; } 
     public string PropertyTwo { get; set; } 

     public virtual ParentObject Parent { get; set; } 
    } 

    internal class MyInitializer : DropCreateDatabaseAlways<MyContext> 
    { 

     protected override void Seed(MyContext context) 
     { 
      context.Parents.Add(new ParentObject() { PropertyOne = "hi" }); 
      base.Seed(context); 
     } 
    } 
} 
+0

Ha intentado especificar explícitamente el origen de datos, sé que si lo deja en blanco, cree que es el mismo equipo, pero intente ponerlo en su lugar y vea si obtiene los mismos resultados. –

+0

Sí, lo he especificado explícitamente en mi ejemplo cuando configuré la cadena de conexión. –

+1

Simplemente comprobando obviamente que el código anterior que ha escrito también se encuentra en el equipo SQL Server al que se está conectando, ¿no? Solo revisando. –

Respuesta

21

que tenían el mismo error que me llevó frutos secos durante aproximadamente un día. Mi situación era que tenía una gran solución con un proyecto de puesta en marcha preexistente y estaba agregando EF al proyecto de persistencia.

Así que el primer paso fue agregar la dependencia de EF. Esto creó una app.config en mi proyecto de persistencia con el contenido EF correcto. Luego fui a Enable-Migrations y obtuve el mismo error en esta publicación. En este punto, no pensé en copiar la configuración de EF app.config en el app.config del proyecto de inicio ya que pensé que tendría que jugar con él antes de que finalmente ejecutara la aplicación.

El problema se resolvió cuando cambié el proyecto de puesta en marcha de la solución al proyecto de persistencia para que EF pudiera encontrar el app.config correcto. O podría haber copiado la sección relacionada con EntityFramwework en el app.config del proyecto de puesta en marcha.

+2

Muchas gracias. Estaba golpeando mi cabeza contra esto. –

+0

¡Esta respuesta probablemente solo me salvó las horas! Gracias –

+2

¡Proyecto de puesta en marcha ...! Mereces un abrazo! – Lernkurve

0

Trate de tener una mirada aquí se explica muchas de las causas, ya que se indica en los comentarios que usted hizo de forma explícita especifique el nombre del servidor y el código se ejecuta también en la misma máquina que el servidor sql, ya que, por lo que veo, la fuente de datos solo tiene un punto, lo que indica que es la misma máquina que el programa de código C# que se está ejecutando.

http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx

0

Tuve que agregar la dependencia EntityFramework también al proyecto de inicio.

Install-Package EntityFramework 

y también tuvo que definir connectionStrings a mi proyecto principal App.config/Web.config.

<connectionStrings> 
    <add name="Database" providerName="System.Data.SqlClient" connectionString="foo.bar" /> 
</connectionStrings> 
1

tenían el mismo mensaje de error desarrollando a nivel local , pero funcionó bien ayer. Resulta que el proyecto incorrecto en la solución se estableció como el Proyecto de inicio.

Por lo tanto, si también recibe este mensaje después de un comando de base de datos de actualización en la consola del Administrador de paquetes, asegúrese de verificar si se ha configurado el proyecto de inicio correcto.

Por ejemplo, el proyecto web, y no uno de los proyectos auxiliares. Visual studio parece tener el hábito de configurar otros proyectos como el StartUp por sí mismo a veces ...

0

Tuve el mismo problema y pasé un día entero en él. ¡Finalmente encontré la respuesta de @ Christian y ahora encuentro una manera mucho mejor!

Ponga ConnectionString en el proyecto de inicio. Por lo tanto, no necesita cambiar cada vez que cambie una entidad.

Cuestiones relacionadas