Первая Ошибка Кода 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# на.
пришлось добавить зависимость 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
в проекте запуска. Поэтому вам не нужно переключаться каждый раз, когда вы меняете объект.