Первая Ошибка Кода Entity Framework "Ошибка Определения Местоположения Сервера / Экземпляра"

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

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

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

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

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);
        }
    }
}

6 ответов


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

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

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


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

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

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


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

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


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

Install-Package EntityFramework

а также должен был определить connectionStrings к моему основному приложению проекта.config / Web.конфиг.

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

вот решение для меня традиционный SqlClient может найти экземпляр сервера, но EF не может

короче:

Database.SetInitializer<MyContext>(
new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>(
    useSuppliedContext: true));

основная часть здесь useSuppliedContext: true


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

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