2012-06-18 4 views
10

Sto tentando di utilizzare Code First con la mia istanza locale di Sql Server 2008 R2. Ho creato un utente "dev" e posso accedere e creare database usando Sql Managment Studio. Il problema è che continuo a ricevere un messaggio di errore quando provo a creare un database usando DbContext in EntityFramework. Ecco il messaggio di errore:Primo codice oggetto Entità Errore "Individuazione errore server/istanza specificata"

"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"

Il messaggio di errore Ho controllato il mio server Sql e consente connessioni remote.

ho avulse mio sistema con il seguente codice e ottenere lo stesso errore:

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

Avete provato a specificare esplicitamente l'origine dati, so che se lo lasciate vuoto pensa che sia la stessa macchina ma provate a inserirla e modi e vedere se ottenete gli stessi risultati. –

+0

Sì, l'ho specificato esplicitamente nel mio esempio quando imposto la stringa di connessione. –

+1

Basta controllare, ovviamente, che il codice sopra che hai scritto si trovi anche sulla macchina SQL Server che stai collegando a destra? Solo controllando. –

risposta

21

ho avuto lo stesso errore che mi ha spinto noci per circa un giorno. La mia situazione era che avevo una soluzione di grandi dimensioni con un progetto di start-up preesistente e aggiungevo EF al progetto di persistenza.

Quindi il primo passo è stato aggiungere la dipendenza EF. Questo ha creato un app.config nel mio progetto di persistenza con il contenuto EF corretto. Poi sono andato su Enable-Migrations e ho ottenuto lo stesso errore in questo post. A questo punto non ho pensato di copiare le impostazioni di app.config EF nell'app.config del progetto start-up poiché pensavo che avrei dovuto giocarci prima di eseguire l'app.

Il problema è stato risolto quando ho modificato il progetto di avvio della soluzione nel progetto di persistenza in modo da ottenere EF per trovare l'app.config corretta. Oppure avrei potuto copiare la sezione relativa a EntityFramwework nell'app.config del progetto di avvio.

+2

Grazie mille. Stavo sbattendo la testa contro questo. –

+0

Questa risposta probabilmente mi ha appena salvato le ore! Grazie –

+2

Progetto Start-up ...! Ti meriti un abbraccio! – Lernkurve

0

Prova con uno sguardo qui si spiega molte delle cause, dal momento che hai indicato nei commenti che avete fatto in modo esplicito specificare il nome del server e il codice viene eseguito anche sulla stessa macchina di SQL Server poiché da quello che vedo l'origine dati ha solo un punto, a indicare che è la stessa macchina su cui è in esecuzione il programma in codice C#.

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

0

Ha dovuto aggiungere anche la dipendenza EntityFramework al progetto di avvio.

Install-Package EntityFramework 

e ha avuto anche per definire connectionStrings al mio progetto principale App.config/web.config.

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

avuto lo stesso messaggio di errore sviluppando sul locale , ma ha funzionato bene ieri. Si scopre che il progetto sbagliato nella soluzione è stato impostato come Progetto di avvio.

Quindi, se si riceve questo messaggio anche dopo un comando update-database nella console di Gestione pacchetti, accertarsi di aver impostato il Progetto di avvio corretto.

Ad esempio il progetto Web e non uno dei progetti di supporto. Visual Studio sembra avere l'abitudine di impostare altri progetti come StartUp da solo a volte ...

0

Ho avuto lo stesso problema e ci ho dedicato un'intera giornata. Finalmente ho trovato la risposta di @ Christian e ora trovo un modo molto migliore!

Inserire ConnectionString nel progetto di avvio. Quindi non è necessario cambiare ogni volta che si modifica un'entità.