Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/56: Рейтинг темы: голосов - 56, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16

Конфигурирование Entity Framework в отдельной сборке

02.02.2016, 19:28. Показов 10536. Ответов 18

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня такая проблема. Я хочу спрятать всю логику доступа к бд в отдельной сборке. Но, при первом обращении к бд, приложение падает с ошибкой

"Исключение типа "System.InvalidOperationException" возникло в EntityFramework.dll, но не было обработано в коде пользователя

Дополнительные сведения: Для поставщика ADO.NET с неизменяемым именем "System.Data.SqlClient" не найден поставщик Entity Framework. Убедитесь, что поставщик зарегистрирован в разделе "entityFramework" файла конфигурации приложения. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=260882."

Вся поставщики и conection strings указаны в конфиг файле этой зависимой сборке. На msdn читал, что все конфигурации должны быть прописаны в конфиге исполняемой сборки. Но в таком случае придется тянуть EF в основную сборку, чего быть не должно

Собственно вопрос. Как заставить Ef использовать конфигурации в зависимой сборке?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.02.2016, 19:28
Ответы с готовыми решениями:

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Entity Framework 6
Нарисовалась неожиданная проблемка. Штудирую Троелсена, там описание Framework 4, у меня 6-я версия. Один из примеров пришлось...

18
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 07:02
Цитата Сообщение от panya911 Посмотреть сообщение
Но в таком случае придется тянуть EF в основную сборку,
Это ещё почему?
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 09:08  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это ещё почему?
Потому что при попытке сделать это, вываливается exception
"Исключение типа "System.InvalidOperationException" возникло в mscorlib.dll, но не было обработано в коде пользователя

Дополнительные сведения: Не удалось загрузить тип поставщика Entity Framework "System.Data.Entity.SqlServer.SqlProvide rServices, EntityFramework.SqlServer", зарегистрированный в файле конфигурации приложения для поставщика ADO.NET с неизменяемым именем "System.Data.SqlClient". Проверьте, чтобы использовалось полное имя сборки и сборка была доступна в работающем приложении. Дополнительные сведения см. в разделе http://go.microsoft.com/fwlink/?LinkId=260882"

Однако если сделать эту зависимую сборку исполняемой и попробовать в ней подергать Ef, то все работает

Добавлено через 2 минуты
Самое интересное, что в предыдущем проекте моему напарнику удалось сконфигурировать провайдеров прямо в конфиге зависимой сборки
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 09:15
Цитата Сообщение от panya911 Посмотреть сообщение
Не удалось загрузить тип поставщика Entity Framework "System.Data.Entity.SqlServer.SqlProvide rServices, EntityFramework.SqlServer"
Цитата Сообщение от panya911 Посмотреть сообщение
Самое интересное, что в предыдущем проекте моему напарнику удалось сконфигурировать провайдеров прямо в конфиге
Вы сами себе ответили Проблема, в неверно настроенном конфиге. По мимо самой строки подключения должны быть и настроены поставщики EF.
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 09:25  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вы сами себе ответили
Вы не так меня поняли. Поставщики указаны в конфиге исполняемой сборки
Вот кусок конфига:

XML
1
2
3
4
5
6
7
8
9
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="DelayDb" connectionString="server=localhost\SQLEXPRESS; Database=Delay; Trusted_Connection=True;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
эксепшн же явно говорит, что сборка EF должна быть доступна в работающем приложении.
Может я что то не понимаю..

А про предыдущий проект я сказал, что удалось сконфигурировать провайдеров прямо в конфиге ЗАВИСИМОЙ сборки
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 09:55
Да, боюсь, что вы правы. Я провёл эксперимент и пришёл к заключению, что чтобы использовать сборку с EF, в конфиг основного приложения придётся перенести настройки из конфига DLL-ки и подключить EF в зависимости исполняемой сборки.

Лично я вам тут подсказать ничего не смогу, извините

Но буду рад узреть решение от кого-нибудь, кто "в теме".
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 10:04  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
чтобы использовать сборку с EF, в конфиг основного приложения придётся перенести настройки из конфига DLL-ки и подключить EF в зависимости исполняемой сборки.
Но почему это работает здесь?
https://github.com/Apostol59/E... /Endowment
Все провайдеры полностью сконфигурированы в Data Layer
И все прекрасно работает.
Может вы увидите что то, чего не вижу я
Напарник сказал, что он танцевал с бубном два дня, но не помнит, как у него это получилось
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 10:43
panya911, вы таки будете смеяться, но я разобрался))) Всё как всегда оказалось крайне просто и тупо: моему приложение (и, в теории, вашему сейчас) просто не хватало библиотеки "EntityFramework.SqlServer.dll" в папке с исполняемым файлом. Причём в app.config самого приложение никакой конфигурации указывать не требуется - достаточно строки подключения (да и ту можно передать в библиотеку другими способами). Вот пример моего app.config:

XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <connectionStrings>
    <add name="experiments" connectionString="Server=(local)\SQLEXPRESS;Initial Catalog=Experiments;Integrated Security=true" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
Т.е. в вашей папке должны валяться:
- исполняемая сборка
- либа с кодом EF
- EntityFramework.dll
- EntityFramework.SqlServer.dll

В моём случае этого оказалось достаточно. Никаких зависимостей в исполняемой сборке от EF нет (таки я был прав со своим первым комментарием). Ваш проект (который вы выложили для ознакомления) потому и работал, что в папку bin веб-приложения падали все библиотеки, включая EntityFramework.SqlServer.dll, что и привело к работоспособности проекта.
1
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 15:09  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Т.е. в вашей папке должны валяться:
- исполняемая сборка
- либа с кодом EF
- EntityFramework.dll
- EntityFramework.SqlServer.dll
Вы правы. SqlServer.dll отсутствует. Почему студия самостоятельно не подтягивает его туда при компиляции?
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 15:11
Она подтягивает, если для вышеуказанной либы Copy Local установлено в True (по умолчанию). И в папке с DLL-кой с EF кодом нужные зависимости должны лежать...
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 15:16  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
И в папке с DLL-кой с EF кодом нужные зависимости должны лежать...
Не совсем понял, что вы имеете в виду
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 15:22
Это потому, что я как дворник таджикский свои мысли излагаю

Библиотеки EntityFramework.dll и EntityFramework.SqlServer.dll должны упасть в папку Release\Debug проекта DLL-файла в котором вы разместили код, использующий EF. Если вы используете эту DLL-ку в другом проекте, то это (похоже) не заставит студию скопировать вам зависимости этой библиотеки - только саму библиотеку. Я в этом вопросе не сильно разбираюсь (пока что), но думаю, что в студии должна быть нужная галочка "сделать зашибись".
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 15:26  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
то это (похоже) не заставит студию скопировать вам зависимости этой библиотеки - только саму библиотеку
Но сама EntityFramework.dll почему то попадает в bin исполняемого файла

Добавлено через 52 секунды
Цитата Сообщение от Usaga Посмотреть сообщение
Ваш проект (который вы выложили для ознакомления) потому и работал, что в папку bin веб-приложения падали все библиотеки, включая EntityFramework.SqlServer.dll, что и привело к работоспособности проекта
Просмотрел папку bin
Там так же нет SqlServer.dll
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 15:31
Да, и это странно

Добавлено через 1 минуту
Цитата Сообщение от panya911 Посмотреть сообщение
Просмотрел папку bin
Там так же нет SqlServer.dll
Возможно приложение берёт её из GAC...

Добавлено через 3 минуты
В любом случае, приложение находит где-то эту библиотечку, иначе бы не заработало оно у вас.
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 15:47  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Возможно приложение берёт её из GAC...
если бы он брал ее из GAC, то и это приложение бы работало

Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
В любом случае, приложение находит где-то эту библиотечку
Возможно .Net подтягивает ее при компиляции, если она явно используется в коде
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 15:50
Ну это вопрос углублённого изучения документации. Думаю нам обоим это не повредит. Но на данный момент мы с вами эту тему одолели
0
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 15:51  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Причём в app.config самого приложение никакой конфигурации указывать не требуется - достаточно строки подключения (да и ту можно передать в библиотеку другими способами)
А откуда он тогда возьмет провайдеров, если он не подтягивает конфиги зависимой сборки?
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
03.02.2016, 15:54
Вот тут я затрудняюсь, что-то умное ответить. У меня оно работает в таком виде. Может быть EF использует настройки по умолчанию...
1
1 / 1 / 0
Регистрация: 24.08.2014
Сообщений: 16
03.02.2016, 16:00  [ТС]
эх. Но все равно спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2016, 16:00
Помогаю со студенческими работами здесь

Entity framework One vs Zero-or-One
При настройке ассоциаций между двумя сущностями можно выбрать чтобы на конце связь была &quot;один&quot; и &quot;ноль или один&quot;-не...

Мистика Entity Framework
Доброго вечера, дорогие форумчане. Помогите пожалуйста решить очередные мистические вопросы программирования. Разрабатываю проект со...

using hierarchyid in entity framework
Всвязи с тем что текущая версия Entity Framework (4.1) не поддерживает hierarchyid, так как данный тип не стандартизован, хочу предложить...

Использовать ли Entity Framework?
Здравствуйте! Для своей работы хочу разработать приложение, взаимодействующее с БД, которая должна содержать около 30 табличек. Поскольку...

Entity framework savechange()
Когда валится savechange(),иногда не понятно в чем ошибка.Есть ли более подробное описание ошибки?


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru