Entity Framework теряет привязку к строке подключения в Visual Studio - PullRequest
6 голосов
/ 24 марта 2011

У меня проблема с тем, что edmx-файл Entity Framework, по-видимому, теряет связь со строкой подключения, с которой он был создан.

Конструктор для моего файла .edmx работал отлично - я мог выполнить «Обновление из базы данных», и он всегда переходил к шагу мастера, который позволял бы мне добавлять таблицы, процедуры и т. Д. Теперь, когда я нажимаю «Обновить из» базы данных ", я получаю шаг мастера" Выберите подключение к данным ", на котором он хочет, чтобы я выбрал новую базу данных - если я пройду через эти шаги, он создаст для меня новую строку подключения и восстановит все объекты, как если бы я начинал с нуля.

Содержимое моего файла app.config точно такое же, каким оно было до возникновения проблемы, но я изменил файл, а затем вернул его обратно таким, каким он был. Я думаю, что изменение этого файла вызывает то, что приводит к потере привязки, но я не могу понять, что это такое.

Ключ строки подключения в файле конфигурации соответствует атрибуту CdmEntityContainer в файле EDMX.

Я даже пытался убить свою кодовую базу и повторить проверку из системы контроля версий, но, похоже, это не сработало. Другие люди, работающие с той же кодовой базой, сталкиваются с такой же проблемой, поэтому кажется, что где-то в проекте что-то определенно не так. Но не было соответствующих изменений в файлах .csproj или .sln - просто я ничего не вижу нигде, что могло бы вызвать это.

Есть идеи? Единственное решение, которое я вижу сейчас, - это удалить и заново создать файлы edmx с нуля, но я определенно надеюсь найти что-то лучшее.

РЕДАКТИРОВАТЬ : Если я сгенерирую новый edmx в проекте, не связанный с каким-либо из существующих, он, кажется, исправит все остальное. Он должен «перезагружать» все, что есть в проекте. Но это не может быть законным решением, поэтому я все еще надеюсь на что-то лучшее.

Ответы [ 4 ]

3 голосов
/ 31 июля 2013

У меня только что была эта проблема, и в строке подключения я пропустил

имя приложения = EntityFramework в источнике данных

2 голосов
/ 29 октября 2011

Я только что это и решил.

Проблема заключалась в том, что edmx использовался в качестве моего DAL с собственным проектом и веб-конфигурацией, а DAL вызывался моим проектом ASP.NET (проект решения по умолчанию) с собственной веб-конфигурацией ITS.

Конфиги были одинаковыми целую вечность, но проект ASP.NET был направлен на другой сервер (т.е. изменилась строка подключения). Несмотря на то, что строка подключения DAL все еще не была изменена, действительна, и проект ASP.NET не был задействован, когда вы хотите «обновить модель из базы данных» во время разработки, это должно быть связано с конфликтом проекта по умолчанию.

Я изменил connstring в веб-конфигурации проекта, содержащего edmx, на тот же, что и у проекта по умолчанию, и он снова заработал.

1 голос
/ 27 мая 2017

Старый вопрос, но я думал, что опубликую исправление, которое работает для меня, для тех, у кого все еще есть эта проблема.В моем случае это была просто проблема с паролем.Я работал в тесте, но строка подключения использовала пароль для производства.Более полезный ответ от VS может заключаться в отображении сообщения типа «Неверный логин или пароль», так как это на самом деле проблема.

1 голос
/ 24 марта 2011

Если вы столкнулись с перебоями между средами (например, dev, prod), когда возникла эта проблема, и вы используете другую версию SQL Server (например, 2005, 2008) в этих средах, у вас могут возникнуть некоторые проблемы. Номер версии БД сохраняется где-то в файле .edmx.

Если дело обстоит так, дайте мне знать, и я могу выкопать детали и ответить на них. Если нет, я не знаю, что это может быть.

Удачи!

РЕДАКТИРОВАТЬ: Я понимаю, что это, вероятно, не имеет никакого отношения к реальной проблеме, но я хотел бы предоставить конкретные детали, которые я упомянул на случай, если кто-то еще столкнется с этим. Атрибут ProviderManifestToken в элементе Schema (внутри .edmx) содержит номер версии базы данных. Обратите внимание, что он фактически использует год (например, 2005, 2008) вместо истинного номера версии БД. Если вы создаете модель для одной версии и перемещаете ее в другую версию, вам нужно вручную отредактировать файл, чтобы изменить это значение.

<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
      <Schema Namespace="..." Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
        ...
      </Schema>
    </edmx:StorageModels>
  </edmx:Runtime>
</edmx:Edmx>
...