2014-08-29 2 views
2

Хорошо, это странно. У меня есть решение, которое содержит два проекта. Проект A ссылается на проект B. Проект B, по сути, представляет собой проект библиотеки классов, который содержит модель сущности Entity Framework, сначала создал базу данных. В app.config проекта A у меня есть несколько строк соединений, которые указывают на разные базы данных на одном сервере. Мое программное обеспечение отлично работает. Вот мои соединения строки:Странное поведение с строками подключения Entity Framework

<add name="LRIP 1, 2, 1A" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />  
<add name="ECP 1" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2ECP1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
<add name="ECP2" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2ECP2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
<add name="TR-12" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2TR_12;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Теперь мой коллега также работает над решением, которое использует Проект B (модель данных). Он имеет одну строку подключения в его файле app.config:

<add name="Kreus2Context" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Как вы можете видеть, строка подключения указывает на тот же сервер (Kreus), что шахты. Он хотел использовать мои строки соединений (так как я уже их создал) и вставлял их в свой app.config.

Теперь, когда он работает, он получает сообщение об ошибке:

The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development...

Мы оба с использованием той же модели (один в проекте B), так что я не знаю, почему мои строки соединения Арен» он работает на него. Между моделями нет разницы, мы используем его как ссылку для основного проекта. Будучи относительно новым для EF, я не понимаю, где искать решения. Я надеюсь, кто-то может указать мне в правильном направлении.

EDIT: Для ясности я должен упомянуть, что моя программа позволяет пользователю выбирать из раскрывающегося списка и выбирать таблицу данных, с которой они хотят взаимодействовать. Я прохожу выбранное имя в конструктор для DataContext: добавлена ​​

var dataContext = new Kreus2Context(name); // name is what the user chose for the drop-down 

Мой коллега, что те же функции (падение коробки, и конструктор для контекста, который принимает строку PARM для имени строки подключения).

TL; DR: Мой сотрудник и я оба используем одну и ту же базовую модель EF. Мои строки соединений, вырезанные и вставленные в его app.config, просто не работают, хотя мы используем одну и ту же точную модель (это в проекте библиотеки классов, который мы оба указываем в наших программах).

ОБНОВЛЕНИЕ: Как указано в ответе ниже, основным источником проблемы здесь было то, что мой сотрудник скопировал строки подключения в неправильный файл app.config. У него было два проекта в своем решении: один для графического интерфейса и один для бизнес-логики, который использовал проект B (модель EF). Строки подключения должны быть применены к файлу app.config в проекте GUI, его исполняющем проекте. Вместо этого они были скопированы в файл app.config в его бизнес-логическом проекте, который даже не использовался.

+0

Во всех случаях я видел это ошибка вызвана тем, что строка SQL Connection передается в контекст Database-First (альтернативой является [EF Connection String] (http://msdn.microsoft.com/en-us/data/jj592674), поскольку у вас есть перечисленные в вашем вопросе). Не показывая нам ** все ** код, который он использует для создания экземпляра DbContext, на самом деле невозможно ответить на этот вопрос. –

+0

@ErikPhilips Мой сотрудник создает экземпляр контекста, как описано выше: 'var dataContext = new Kreus2Context ...' Мы оба создаем контекст таким же образом, даже до того, как он скопировал мои строки подключения в свой app.config и его соединение строка работала. Контекст, который он использовал «Kreus2Context», точно такой же, как мой «LRIP 1, 2, 1a», только имена разные. Он может создать контекст, используя имя «LRIP», но когда он пытается использовать его в инструкции LINQ, он получает указанную выше ошибку, и единственное отличие - это имя строки подключения. – Kevin

+0

Возможный дубликат [Нет строки подключения с именем «MyEntities» не может быть найден в файле конфигурации приложения] (http://stackoverflow.com/questions/12622408/no-connection-string-named-myentities-could-be-found- в-приложения-конфигурации) –

ответ

0

Модель сначала или база данных сначала вызывает создание модели для использования .edmx-файла. Код, сгенерированный кодом, сначала будет вызывать указанное выше исключение в методе создания модели, поскольку код сначала его не использует.

  • скан кода покажет, если этот метод возвращает исключение
  • если это так изменить строку подключения использовать код первого формата