CodeFluent Entities — помощь в настройке потребления MySql во время разработки в Visual Studio

У меня возникла проблема в Visual Studio 2013 при использовании объектной модели, созданной объектами CodeFluent Entities во ВРЕМЯ ПРОЕКТИРОВАНИЯ.

Это сторонний компонент отчетности, который обеспечивает привязку к источникам данных объектов POCO с дополнительными функциями доставки оперативных данных из возвращаемой коллекции объектов, предоставленных источником данных POCO. Затем он показывает хороший предварительный просмотр отчета с данными в Visual Studio 2013 в DESIGN TIME.

Я настроил отчет, указывающий на объектный источник данных, где тип возвращаемого значения — CodeFluent Entities «Namespace». «Entity» Тип коллекции (я просто использую функцию LoadAll, сгенерированную по умолчанию, и возвращаю ее вызов).

Что ж, тогда я могу заставить эту работу работать нормально. В ВРЕМЯ ПРОЕКТИРОВАНИЯ компонент отчетов в Visual Studio правильно вызывает метод LoadAll в спецификации и извлекает данные из уровня сохраняемости. Все это во ВРЕМЯ ПРОЕКТИРОВАНИЯ (ни один проект в моем решении VS никогда не запускается, чтобы запустить LoadAll и получить данные из базы данных), я не могу не подчеркнуть этого достаточно.

Здесь мне нужна твоя помощь. То, что я описал, работает при использовании SQL Server в качестве уровня сохраняемости, но НЕ при использовании MySql.

Поскольку все функциональные возможности, которые я здесь описываю, реализуются во время разработки VS, этот компонент отчета использует специальную конфигурацию для создания экземпляров классов .NET и запуска методов из объекта без запуска точки входа проекта. Поскольку проект никогда не запускается, он не запускает код инициализации для классов сущностей CodeFluent для правильного использования уровня сохраняемости. Затем я должен создать новый класс с новой функцией, в которой строка подключения в CodeFluent.Runtime.CodeFluentContext задается с нуля.

С практической точки зрения, это проблема:

У меня есть «специальный» класс с функцией, вызываемой его конструктором, которая служит источником данных объекта для компонента отчетности, например:

Public Class DuplicataLoadService
    Public Function LoadByParams() As S5T.DuplicataCollection
        Dim context As CodeFluentContext = CodeFluent.Runtime.CodeFluentContext.[Get](S5T.Constants.S5TStoreName)

        context.Persistence.ConnectionString = "Data Source=MYCOMPUTER\SQLEXPRESS;Initial Catalog=duplicatas4t;User ID=user;Password=pwd"

        LoadByParametros = S5T.DuplicataCollection.LoadAll
    End Function

    Public Sub New()
        Me.LoadByParams()
    End Sub

End Class

Я называю этот класс «особым», потому что он никогда не выполняется во время выполнения, запуская мой проект winforms. Я устанавливаю точки останова, они никогда не сбиваются. Этот класс используется только в Visual Studio DESIGN TIME.

Мой App.config настроен на использование сохраняемости SQL Server, например:

<configuration>
    <configSections>
      <section name="S5T" type="CodeFluent.Runtime.CodeFluentConfigurationSectionHandler, CodeFluent.Runtime" />
    </configSections>

  <S5T connectionString="Data Source=MYCOMPUTER\SQLEXPRESS;Initial Catalog=duplicatas4t;User ID=user;Password=pwd" />

  </configuration>

В этом сценарии он работает нормально, но когда я перехожу на использование постоянства MySql, он больше не работает (пожалуйста, помогите).

** НЕ РАБОТАЕТ, генерируется общее исключение ***

Public Class DuplicataLoadService
    Public Function LoadByParams() As S5T.DuplicataCollection
        Dim context As CodeFluentContext = CodeFluent.Runtime.CodeFluentContext.[Get](S5T.Constants.S5TStoreName)

        context.Persistence.ConnectionString = "Database=duplicatas4t;Server=localhost;Password=manager;User ID=root;pooling=true;"

        LoadByParametros = S5T.DuplicataCollection.LoadAll
    End Function

    Public Sub New()
        Me.LoadByParams()
    End Sub

End Class

Мой App.config настроен на использование постоянства MySql, например:

<configuration>
    <configSections>
      <section name="S5T" type="CodeFluent.Runtime.CodeFluentConfigurationSectionHandler, CodeFluent.Runtime" />
    </configSections>

  <S5T persistenceTypeName="MySQL"
               connectionString="Database=duplicatas4t;Server=localhost;Password=pwd;User ID=user;pooling=true;"
               mysql-useSchemas="true" />

  </configuration>

В обоих этих случаях я упомянул app.config только в качестве ИЛЛЮСТРАЦИИ, потому что содержимое app.config настраивается и извлекается во время выполнения, когда запускается выполнение проекта. Это не тот случай, я использовал содержимое app.config только в качестве модели, чтобы знать, что должно быть установлено программно для функциональности времени разработки для использования слоя сохраняемости для работы.

Я подозреваю, что мне придется программно добавить дополнительную конфигурацию, когда это MySql.

Поскольку SQL Server используется по умолчанию для объектов CodeFluent, когда в app.config есть только:

<S5T connectionString......

Это работает, у меня есть соответствующий код для программной установки строки подключения, например:

context.Persistence.ConnectionString = ....

Когда это MySql, в app.config присутствуют дополнительные атрибуты, помимо connectionString, например:

<S5T persistenceTypeName="MySQL".......  mysql-useSchemas="true" />

Мой код инициализации состоит только из context.Persistence.ConnectionString = .... недостаточно.... Имеет ли это смысл?

Как я могу программно инициализировать атрибуты persistenceTypeName и mysql-useSchemas?

В качестве последнего замечания, оба случая, использующие SQL Server и MySql, нормально работают во время выполнения, что указывает на то, что у меня нет базовой ошибки конфигурации при настройке проекта app.config, производителей постоянства и т. д....

Заранее спасибо,

Ренато


person Renato Xavier    schedule 18.12.2015    source источник


Ответы (1)


В файле конфигурации вы устанавливаете PersistenceTypeName и некоторые определенные атрибуты конфигурации MySQL. По умолчанию для PersistenceTypeName установлено значение SQL Server, а строка подключения по умолчанию используется. Вот почему он работает во время разработки с SQL Server.

При использовании MySQL необходимо изменить конфигурацию (PersistenceTypeName, Connection String и т. д.). Поскольку вы не можете использовать файл конфигурации во время разработки, вы должны установить конфигурацию с помощью кода. Экземпляр CodeFluentConfiguration доступен в context:

var context = CodeFluent.Runtime.CodeFluentContext.Get("S5T");
context.Configuration.PersistenceTypeName = "MySQL";
context.Configuration.Element.SetAttribute("mysql-UseSchema", "true");

Атрибуты, специфичные для поставщика, должны быть установлены в элементе XML, поскольку в классе конфигурации generic нет связанного свойства.

person meziantou    schedule 18.12.2015
comment
Да, meziantou, ваш ответ имеет смысл, спасибо. Я только что заметил, что есть еще одна часть файла конфигурации, которую мне нужно перевести в код: ‹runtime› ‹assemblyBinding xmlns=urn:schemas-microsoft-com:asm.v1› ‹dependentAssembly› ‹assemblyIdentity name=MySql.Data Culture=neutral publicKeyToken =c5687fc88969c44d/› ‹bindingRedirect oldVersion=6.9.5.0 newVersion=6.5.4.0 /› ‹/dependentAssembly› ‹/assemblyBinding› ‹/runtime› - person Renato Xavier; 18.12.2015
comment
Я не уверен, что это возможно. Возможно, событие ResolveAssembly поможет вам загрузить правильная сборка. - person meziantou; 18.12.2015
comment
Как только я выясню, как кодировать это перенаправление сборки, проблема может быть решена. Если у вас есть какие-либо другие предложения, пожалуйста, сообщите... Спасибо! - person Renato Xavier; 18.12.2015
comment
Хорошо, я посмотрю на этот meziantou, все равно спасибо! - person Renato Xavier; 18.12.2015