Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: enot от 11-02-2022, 17:01:02

Название: sql
Отправлено: enot от 11-02-2022, 17:01:02
При работе плагина с sql строка подключения ищется в конфиге ревита. Можно ли поменять место поиска?
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:03:32
При работе плагина с sql строка подключения ищется в конфиге ревита. Можно ли поменять место поиска?
Очень желательно уточнить как плагин работает с SQL. Какое API используется?
Название: Re: sql
Отправлено: enot от 11-02-2022, 17:07:17
плагин работает через модель ADO.NET ( EntityFramework)
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:15:00
плагин работает через модель ADO.NET ( EntityFramework)
А на лету подставить строку подключения ты не можешь? В этом случае ты мог бы хранить её где угодно.
Название: Re: sql
Отправлено: enot от 11-02-2022, 17:16:05
плагин работает через модель ADO.NET ( EntityFramework)
А на лету подставить строку подключения ты не можешь? В этом случае ты мог бы хранить её где угодно.

на лету - пример как? Вообще у приложения есть свой App.config и в нем содержится строка подключения, но Ревит игнорирует этот конфиг, ищет строку подключения в своем конфиге
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:18:04
https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/connection-string-syntax
Название: Re: sql
Отправлено: enot от 11-02-2022, 17:27:29
Вообще, на лету строку можно прописать, при создании экземпляра модели базы данных (БД). Но , в ситуации когда вся работа и модель БД описана в одном dll который в свою очередь подгружается ссылкой в dll самого плагина - то тут эта прописанная строка игнорируется, не понятно почему. Поэтому тут вопрос, есть ли что то универсальное , чтобы Ревит искал строку подключения именно в заданном конфиге
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:33:25
enot,
Посмотри эту тему: https://stackoverflow.com/questions/34350851/entity-framework-6-set-connection-string-in-code
Там описано как создать строку подключения в EntityFramework в коде. Ну а раз можно в коде, то ты можешь прочитать ее и из своего файла конфигурации.
Название: Re: sql
Отправлено: Александр Пекшев aka Modis от 11-02-2022, 17:36:00
на лету - пример как? Вообще у приложения есть свой App.config и в нем содержится строка подключения, но Ревит игнорирует этот конфиг, ищет строку подключения в своем конфиге

Потому что плагин - это не приложение и у него не может быть app.config
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:38:38
на лету - пример как? Вообще у приложения есть свой App.config и в нем содержится строка подключения, но Ревит игнорирует этот конфиг, ищет строку подключения в своем конфиге

Потому что плагин - это не приложение и у него не может быть app.config
Быть он может, но он игнорируется.
Название: Re: sql
Отправлено: Александр Пекшев aka Modis от 11-02-2022, 17:41:10
на лету - пример как? Вообще у приложения есть свой App.config и в нем содержится строка подключения, но Ревит игнорирует этот конфиг, ищет строку подключения в своем конфиге

Потому что плагин - это не приложение и у него не может быть app.config
Быть он может, но он игнорируется.

Он может быть, но его чтение нужно реализовывать вручную. Стандартный функционал читать его конечно-же не будет, так как выполняемая программа в данный момент - это автокад, а не плагин
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:42:55
на лету - пример как? Вообще у приложения есть свой App.config и в нем содержится строка подключения, но Ревит игнорирует этот конфиг, ищет строку подключения в своем конфиге

Потому что плагин - это не приложение и у него не может быть app.config
Быть он может, но он игнорируется.

Он может быть, но его чтение нужно реализовывать вручную. Стандартный функционал читать его конечно-же не будет, так как выполняемая программа в данный момент - это автокад, а не плагин
Согласен! :)
Название: Re: sql
Отправлено: Александр Ривилис от 11-02-2022, 17:44:33
enot,
Еще одна статья на эту тему: https://www.c-sharpcorner.com/UploadFile/dacca2/pass-connection-string-in-run-time-to-entity-framework/
Название: Re: sql
Отправлено: Александр Пекшев aka Modis от 11-02-2022, 17:52:08
Немного оффтопика в тему:
Пока я работал в большой конторе, то часто видел практику использования файлов конфигов для такого рода значений - строка подключения к БД, какие-то URL и т.п. Причем, не задолго до моего увольнения, там начали прям обширно это использовать. Задумка ясна как день - поменять какие-то значения не пересобирая плагин... НО! Но это все в теории. На практике никто из пользователей во-первых не знает об этих конфигах, а во-вторых не будет в них ничего менять (ибо нафиг им это не надо). Поэтому новые значения в этих же конфигах доставляются до пользователей с новыми версиями плагинов. Смешно ))
Так что, ИМХО - вбивайте путь подключения к БД прям в код и ничего в вашей жизни
Название: Re: sql
Отправлено: enot от 11-02-2022, 18:04:40
строка подключения в код и вбита при создании контекста БД (так как конфиг плагина игнорируется ) - это работает при запуске плагина.
проблема начинается тогда , когда этот плагин с работой БД добавляется ссылкой (как библиотека) в другой плагин - и тут при запуске этой БД из этой ссылки вылетает ошибка 
Название: Re: sql
Отправлено: Александр Пекшев aka Modis от 11-02-2022, 18:08:31
строка подключения в код и вбита при создании контекста БД (так как конфиг плагина игнорируется ) - это работает при запуске плагина.
проблема начинается тогда , когда этот плагин с работой БД добавляется ссылкой (как библиотека) в другой плагин - и тут при запуске этой БД из этой ссылки вылетает ошибка
Звучит как какая-то ерунда )) Какая ошибка вылетает? Покажите хоть код како-то
Название: Re: sql
Отправлено: enot от 11-02-2022, 18:10:19
Ошибка: No connection string named "Model" could be found in the application config file

Код - C# [Выбрать]
  1. public partial class Model: DbContext  
  2.     {  
  3.         public Model() : base()  
  4.         {  
  5.             ConnectionString ="тут задаю"  
  6.         }  
  7.  
  8.     }  
1.) Собираю dll_db - запускаю как плагин -> создаю экземпляр Model - ок, работает

2.)Далее собираю этот dll_db и подгружаю как ссылку в другой dll (плагин). Запускаю в dll метод dll _db. -> создаю экземпляр Model - ошибка 
Название: Re: sql
Отправлено: Александр Пекшев aka Modis от 11-02-2022, 18:22:29
No connection string named "Model" could be found in the application config file
https://stackoverflow.com/a/19189647/4944499
Название: Re: sql
Отправлено: Дмитрий Загорулькин от 11-02-2022, 18:24:53
Немного оффтопика в тему:
Пока я работал в большой конторе, то часто видел практику использования файлов конфигов для такого рода значений - строка подключения к БД, какие-то URL и т.п. Причем, не задолго до моего увольнения, там начали прям обширно это использовать. Задумка ясна как день - поменять какие-то значения не пересобирая плагин... НО! Но это все в теории. На практике никто из пользователей во-первых не знает об этих конфигах, а во-вторых не будет в них ничего менять (ибо нафиг им это не надо). Поэтому новые значения в этих же конфигах доставляются до пользователей с новыми версиями плагинов. Смешно ))
Так что, ИМХО - вбивайте путь подключения к БД прям в код и ничего в вашей жизни
Не, конфиги точно не для пользователей. Но это довольно логичное и привычное для всех место хранения информации-настроек. Например, изменилась строка подключения. Прилетела задача разработчику - изменить в плагине. Он открывает плагин, идёт в конфиг и меняет. Даже если это не его плагин, даже если он его открыл в первый раз в жизни, он знает: строка подключения - это настройка и она в конфиге. Вот такая унификация и есть тот самый основной профит.
Название: Re: sql
Отправлено: Александр Пекшев aka Modis от 11-02-2022, 18:30:58
Не, конфиги точно не для пользователей. Но это довольно логичное и привычное для всех место хранения информации-настроек. Например, изменилась строка подключения. Прилетела задача разработчику - изменить в плагине. Он открывает плагин, идёт в конфиг и меняет. Даже если это не его плагин, даже если он его открыл в первый раз в жизни, он знает: строка подключения - это настройка и она в конфиге. Вот такая унификация и есть тот самый основной профит.

Да, пожалуй в таком ключе (при коллективной работе) ты прав - есть профит. Но все-равно сомнительный: если я первый раз вижу этот проект, то мне все равно придется найти место, где используется значение из конфига, чтобы убедиться, что это оно мне нужно. Исключение - это если есть прям подробная справка к проекту, актуальности которой я могу верить. Если я не в первый раз вижу проект, то для меня практически одинаково трудозатратно будет поменять нужное значение что в конфиге, что в коде
Название: Re: sql
Отправлено: trir от 14-02-2022, 07:05:16
ConnectionString надо добавить в аргументы конструктора модели