Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
1

IBM DB2, EntityFramework 6, VS 2015, ошибка конфигурации

02.03.2020, 17:03. Показов 6275. Ответов 10

Author24 — интернет-сервис помощи студентам
Есть VS2015 с установленным EntityFramework 6, работает с базой DB2. После переустановки всей DB2 на машине, попытка подключиться к БД и выбрать из неё данные стала выдавать следующую ошибку:

Сообщение об ошибке синтаксического анализатора: Ошибка при создании обработчика раздела конфигурации для system.data: На столбец "InvariantName" наложено ограничение по уникальности. Значение "IBM.Data.DB2" уже имеется.

Ошибка источника:


Строка 122: </system.codedom>
Строка 123: <location path="." inheritInChildApplications="false">
Строка 124: <system.data>
Строка 125: <DbProviderFactories>
Строка 126: <add name="IBM DB2 .NET Data Provider" invariant="IBM.Data.DB2" description="IBM DB2 Data Provider for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208"/>

Исходный файл: ***\web.config Строка: 124

Информация о версии: Платформа Microsoft .NET Framework, версия:4.0.30319; ASP.NET, версия:4.7.2114.0

web.config приложения, куда ссылается ошибка:
Кликните здесь для просмотра всего текста

<location path="." inheritInChildApplications="false">
<system.data>
<DbProviderFactories>
<add name="IBM DB2 .NET Data Provider" invariant="IBM.Data.DB2" description="IBM DB2 Data Provider for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208"/>
</DbProviderFactories>
</system.data>
</location>


machine.config, что находится а каталоге ***\Framework64\v4.0.30319\Config\ имеет такие строки:
Кликните здесь для просмотра всего текста

<system.data>
<DbProviderFactories>
<add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26"/>
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add name="IBM DB2 .NET Data Provider" invariant="IBM.Data.DB2" description="IBM DB2 Data Provider for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208"/>
<add name="IBM Informix .NET Data Provider" invariant="IBM.Data.Informix" description="IBM Informix Data Provider for .NET Framework 4.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208"/>
<add name="IBM DB2 .NET Data Provider 9.7.6" invariant="IBM.Data.DB2.9.7.6" description="IBM DB2 Data Provider 9.7.6 for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2.9.7.6, Version=9.7.6.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208"/>
<add name="IBM Informix .NET Data Provider 9.7.6" invariant="IBM.Data.Informix.9.7.6" description="IBM Informix Data Provider 9.7.6 for .NET Framework 4.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix.9.7.6, Version=9.7.6.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208"/>
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=4.10.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/></DbProviderFactories>
</system.data>



Мне удалось найти схожие ситуации, однако в них речь шла о том, что в machine.config есть строки-дубли. Таковых не заметил.
В какую сторону смотреть, товарищи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2020, 17:03
Ответы с готовыми решениями:

ibm db2 расчёт производных параметров
Всем привет. Появилась интересная задачка - можно ли както в idm db2 посчитать параметры,...

Подключение к БД созданной в IBM db2 express-c из VS
Здравствуйте, с помощью IBM DATA STUDIO я создал БД. Потом подключился к ней из VS через...

IBM DB2 запрос на связывание нескольких таблиц
Всем привет! Можете подсказать, как написать запрос, который связывает несколько таблиц ? ...

Администратор баз данных IBM DB2 (Москва, м.Войковская)
Требования: • Высшее техническое образование; • Опыт от 3-х лет на должности администратора БД;...

10
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
19.03.2020, 11:53  [ТС] 2
В разделе <DbProviderFactories> удалял строку с invariant="IBM.Data.DB2".
Если оставить её только в одном из источников - machine.config или web.config приложения, то при попытке обратиться к контексту БД получается новый результат:

Поле не найдено: "DB2ConnSettings._bEnableEFCaseSensitivity".
Сведения об исключении: System.MissingFieldException: Поле не найдено: "DB2ConnSettings._bEnableEFCaseSensitivity".
0
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
11.08.2021, 16:20  [ТС] 3
И так, продолжаем. Используем EF6, IBM.DB2 и IBM.DATA.DB2.EntityFramework, обращаемся к БД и получаем:
поле не найдено: "DB2ConnSettings._bEnableEFCaseSensitivity".

При помощи ILDASM и просмотра метаданных выявлено странное: указанное поле DB2ConnSettings._bEnableEFCaseSensitivity находится в IBM.DATA.DB2.EntityFramework.dll, однако Visual Studio упрямо твердит - Вызвано исключение: "System.MissingFieldException" в EntityFramework.dll.

Подключение dll проходит успешно - смотрел в утилите Fuslogvw.exe, которая отслеживает привязки сборок.
Кому интересно, то вот здесь детали: https://docs.microsoft.com/en-... dfrom=MSDN

Вопрос переходит в плоскость: почему VS ищет поле в совершенно другой DLL? Кстати, они обе (IBM.DATA.DB2.EntityFramework.dll и EntityFramework.dll) используют частичную привязку.

WRN: Для сборки была указана информация о частичной привязке:
WRN: Имя сборки: IBM.Data.DB2.EntityFramework | Идентификатор домена: 2
WRN: Частичная привязка осуществляется в том случае, если предоставлена только часть отображаемого имени сборки.
WRN: Это может привести к загрузке редактором связей неверной сборки.
WRN: Рекомендуется предоставить полное текстовое удостоверение для сборки,
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
11.08.2021, 23:35 4
Цитата Сообщение от Shambler-AdMec Посмотреть сообщение
В какую сторону смотреть, товарищи?
Очевидно, в сторону упрощения
0
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
16.08.2021, 13:39  [ТС] 5
Удалил дефолтную строку из web.config:
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />

Внутри перехваченного исключения вижу InnerException внутри InnerException и его source теперь ibm.data.db2.entityFramework. Исключение - missing field exception. Однако, первый InnerException сводится к "The provider did not return a ProviderManifestToken string." Message: "An error occurred accessing the database. This usually means that the connection to the database failed."

Добавлено через 2 часа 26 минут
Обратился к объекту Database (System.Data.Common.DbConnection), внутри:
CurrentTransaction = "base.Database.CurrentTransaction" выдал исключение типа "System.Data.Entity.Core.ProviderIncompatibleException"

Будем смотреть.
0
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
17.08.2021, 08:40  [ТС] 6
Есть подозрение, что IIS на сервере не цепляется к БД.
Приложение работает, но "An error occurred accessing the database. This usually means that the connection to the database failed." Пока проверяю это.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.08.2021, 00:12 7
Цитата Сообщение от Shambler-AdMec Посмотреть сообщение
Есть подозрение, что IIS на сервере не цепляется к БД.
А IIS обязан "цепляться" к базам данных ? Вы серьезно ?
0
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
18.08.2021, 08:57  [ТС] 8
Не так серьезно, как ты. Ещё что ни будь спросишь?
0
Эксперт .NET
12309 / 8672 / 1310
Регистрация: 21.01.2016
Сообщений: 32,602
19.08.2021, 09:32 9
Shambler-AdMec, вообще, человек верное замечание сделал. IIS - это веб-сервер, который ни про какие базы не знает.
0
11 / 10 / 3
Регистрация: 27.02.2013
Сообщений: 53
30.09.2021, 11:16  [ТС] 10
Установил DB2 версии 11.
Задал её как инстанс по-умолчанию.
Задал прилагающийся клиентский интерфейс баз данных так же по умолчанию.
Заработало.
0
HF
1193 / 784 / 186
Регистрация: 09.09.2011
Сообщений: 2,396
Записей в блоге: 2
01.10.2021, 12:57 11
Цитата Сообщение от Shambler-AdMec Посмотреть сообщение
Значение "IBM.Data.DB2" уже имеется.
Сначала сделать <clear /> потом <add...>
Но, как мы понимаем все провайдеры удаляются и нужно будет заводить явным видом.

НО! Как мы понимаем можно просто взять и сделать <remove key="IBM.Data.DB2" />

0
01.10.2021, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2021, 12:57
Помогаю со студенческими работами здесь

HTML-файл с VBS-кодом для соединения с базой IBM DB2
Всем привет! В общем такая проблема: написал код HTML-страницы с языком VBScript &lt;HTML&gt; ...

IBM обещает голографические телефоны к 2015 году
К 2015 году мобильные телефоны смогут проецировать трехмерное изображение вызывающего абонента, а...

Свойства конфигурации в Visual Studio 2015 community
Доброе время суток, коллеги! В свойствах конфигурации проекта Visual Studio 2015 Community...

EntityFramework ошибка
Всем добрый день. В своем приложении использую EntityFramework для работы с базой данных SQL....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru