2012-06-18 4 views
10

Я пытаюсь использовать Code First с моим локальным экземпляром Sql Server 2008 R2. Я создаю пользовательский «dev» и могу входить в систему и создавать базы данных с помощью Sql Managment Studio. Проблема в том, что я продолжаю получать сообщение об ошибке при попытке создать базу данных с использованием DbContext в EntityFramework. Вот сообщение об ошибке:Первая ошибка «Ошибка определения местоположения сервера/экземпляра»

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

Сообщение об ошибке Я проверил свой сервер Sql и разрешил удаленные подключения.

Я отведенный свою систему с помощью следующего кода и получить ту же ошибку:

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

Вы пробовали явно указывать источник данных, я знаю, что если вы оставите его пустым, он подумает о своей машине, но попробуйте поместить ее и проделать и посмотреть, получите ли вы те же результаты. –

+0

Да, я явно указал его в моем примере, когда я установил строку подключения. –

+1

Просто проверяя, что код выше, который вы написали, также находится на компьютере SQL Server, с которым вы подключаетесь справа? Просто проверяю. –

ответ

21

Я имел ту же ошибку, что сводило меня с ума около суток. Моя ситуация заключалась в том, что у меня было большое решение с ранее созданным проектом запуска, и я добавлял EF в проект сохранения.

Итак, первым шагом было добавить зависимость EF. Это создало app.config в моем проекте сохранения с правильным содержимым EF. Затем я пошел в Enable-Migrations и получил ту же ошибку в этом сообщении. На данный момент я не думал о копировании параметров EF app.config в app.config проекта запуска, так как я думал, что мне придется поиграть с ним, прежде чем я в конечном итоге запустим приложение.

Проблема была решена, когда я изменил проект запуска решения на проект персистентности, чтобы я мог получить EF, чтобы найти правильный app.config. Или я мог бы скопировать раздел, связанный с EntityFramwework, в app.config проекта запуска.

+2

Большое вам спасибо. Я ударился головой об этом. –

+0

Этот ответ, вероятно, просто спас мои часы! Спасибо –

+2

Стартовый проект ...! Вы заслуживаете объятия! – Lernkurve

0

Попробуйте иметь взгляд здесь это объясняет много причин, так как вы указали в комментариях, что вы сделали в явном виде укажите имя сервера, а код запускается также на том же компьютере, что и на сервере sql, поскольку из того, что я вижу, у источника данных есть точка, указывающая на то, что на нем работает тот же самый компьютер, что и программа кода C#.

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

0

Придется добавить зависимость EntityFramework также к проекту запуска.

Install-Package EntityFramework 

А также должен был определить connectionStrings на мой основной проект App.config/Web.config.

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

Если бы то же самое сообщение об ошибке разработки на местном , но вчера он работал хорошо. Оказывается, что неправильный проект в решении был установлен как проект StartUp.

Итак, если вы получаете это сообщение после команды update-database в консоли диспетчера пакетов, обязательно проверьте, установлен ли правильный проект StartUp.

Например, веб-проект, а не один из вспомогательных проектов. Визуальная студия, похоже, имеет привычку иногда устанавливать другие проекты как StartUp ...

0

У меня была такая же проблема, и я провел целый день. Наконец нашел ответ @ Christian, и теперь я нахожу намного лучший способ!

Положить ConnectionString в стартовый проект. Поэтому вам не нужно переключаться каждый раз, когда вы меняете сущность.

Смежные вопросы