Код ошибки Entity Framework First Error "Ошибка определения местоположения сервера/экземпляра"

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

"Возникла ошибка, связанная с сетью или конкретным экземпляром, в то время как установление соединения с SQL Server. Сервер не найден или был недоступен. Проверьте правильность имени экземпляра и SQL Server настроен для удаленного подключения. SQL Network Interfaces, ошибка: 26 - Ошибка определения местоположения сервера/экземпляра"

Сообщение об ошибке я проверил свой 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);
        }
    }
}

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Install-Package EntityFramework

И также пришлось определить connectionStrings в моем основном проекте App.config/Web.config.

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

Ответ 6

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

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