Entity Framework 4.1 не будет подключаться к SQL Server после использования подхода Database First - PullRequest
0 голосов
/ 11 августа 2011

Я создал новый веб-сайт MVC 3, используя EF 4.1 с подходом DB first. Я создал файл edmx, а затем классы DBContext (новая функция 4.1). все прошло хорошо.

Затем я создал новые контроллеры, используя автоматическое создание для DBContext. Все не было здорово.

Теперь, когда я пытаюсь запустить веб-сайт, он не подключится к самой созданной строке подключения.

Вот строка подключения:

<add name="PizzaByMeEntities"
     connectionString='metadata=res://*/Models.PizzaByMeModel.csdl|
                                res://*/Models.PizzaByMeModel.ssdl|
                                res://*/Models.PizzaByMeModel.msl;
                       provider=System.Data.SqlClient;
                       provider connection string="data source=(local);
                                                   initial catalog=PizzaByMe;
                                                   integrated security=True;
                                                   pooling=False;
                                                   multipleactiveresultsets=True;
                                                   App=EntityFramework;"'
     providerName="System.Data.EntityClient" />

Когда я запускаю сайт, я получаю:

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

Странная часть в том, что если я удаляю строку подключения - я все равно получаю точно такую ​​же ошибку. Я полагаю, что EF просто не может найти строку подключения, даже когда она там есть.

Есть идеи?

Спасибо!

EDIT:

Мой DBContext выглядит следующим образом:

public partial class PizzaByMeEntities : DbContext
{
    public PizzaByMeEntities()
        : base("name=PizzaByMeEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<X> Xs{ get; set; }
    public DbSet<Y> Ys{ get; set; }
    public DbSet<Z> Zs{ get; set; }
}

РЕДАКТИРОВАТЬ 2:

рабочая строка подключения такова:

  <add name="PizzaByMe" connectionString="Data Source=(local);initial catalog=PizzaByMe;integrated security=True;pooling=False;multipleactiveresultsets=True;" providerName="System.Data.EntityClient" />

Хотя, чтобы это работало - я просто использовал прямое соединение ADO.NET.

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

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

public PizzaByMeEntities : DbContext
{
    public PizzaByMeEntities()
    {
        // ...
    }
}

Если у вашего контекста есть другое имя, вы должны указатьимя строки подключения в конструкторе:

public PizzaByMeContext : DbContext
{
    public PizzaByMeContext() :
        base("name=PizzaByMeEntities")
    {
        // ...
    }
}

Ниже приведены сведения о соединениях и строках подключения с DbContext: http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

Редактировать: Другая догадка

Строка подключения должна быть в web.config вашего приложения MVC, а не в app.config проекта библиотеки классов, где у вас, возможно, есть модель EF и DbContext.Это так?

0 голосов
/ 12 августа 2011

Phewwww .... понял это !!!

Объект Context, который создал контроллер (при использовании нового контекста), создал объект без конструктора, который выбирает строку подключения.Поэтому он попытался использовать некоторую несуществующую строку подключения.

В заключение - любой объект, производный от DBContext, должен использовать конструктор, который будет указывать строку подключения.

Спасибо, ребята, за помощь:))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...