Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / EF6 DbConfiguration и 2 базы данных / 9 сообщений из 9, страница 1 из 1
29.07.2015, 10:54
    #39018382
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
День добрый,

Background

Приложение работает с 2мя базами данных, для которых написаны 2 DLL.

Контекст имеет следующий вид

Код: vbnet
1.
2.
3.
4.
5.
6.
Partial Public Class ContextTest1
    Inherits DbContext
    Public Sub New()
        MyBase.New(DbConnectionHelper.ConnectionString)
    End Sub
End Class



Созданы 2 класса

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
    Friend Class DbConfigurationHelper
        Inherits Entity.DbConfiguration

        Friend Sub New()
            SetProviderServices(Entity.SqlServer.SqlProviderServices.ProviderInvariantName, Entity.SqlServer.SqlProviderServices.Instance)
            SetDefaultConnectionFactory(New Entity.Infrastructure.LocalDbConnectionFactory("mssqllocaldb"))
        End Sub

    End Class

    Friend Class DbConnectionHelper

        Friend Shared Function ConnectionString() As String

            Dim sqlbuilder As New SqlClient.SqlConnectionStringBuilder

            sqlbuilder.DataSource = "***"
            sqlbuilder.InitialCatalog = "test1"

            sqlbuilder.UserID = "***"
            sqlbuilder.Password = "***"

            sqlbuilder.PersistSecurityInfo = True
            sqlbuilder.MultipleActiveResultSets = True
            sqlbuilder.ApplicationName = "EntityFramework"

            Return sqlbuilder.ConnectionString

        End Function
    End Class



Проблема
Все это работает при условии что в приложении подключение к 1ой базе данных.
Если 2 базы данных то выдает следующую ошибку

An instance of 'EfDbConfiguration' was set but this type was not discovered in the same assembly as the 'test1' context. Either put the DbConfiguration type in the same assembly as the DbContext type, use DbConfigurationTypeAttribute on the DbContext type to specify the DbConfiguration type, or set the DbConfiguration type in the config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information.*


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

Решение которое вижу я это создать класс DbConfiguration в отдельной DLL со своим Namespace и подрубать его в каждую DLL которая создана для получения данных с SQL


Подскажите плизз уважаемые что Вы в данном случае делаете?
Очень не хочется указывать ConnectionString в App.config | Web.config самого приложения.
Хочется их оставить в DLL где создан слой и репозитории.


В гугле нашел вот это http://stackoverflow.com/questions/20308378/configure-multiple-database-entity-framework-6
Но вменяемого ответа там не увидел.
...
Рейтинг: 0 / 0
29.07.2015, 11:34
    #39018433
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
Артем GОчень не хочется указывать ConnectionString в App.config | Web.config самого приложения.
А придется.
...
Рейтинг: 0 / 0
29.07.2015, 12:08
    #39018480
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
Артем GПодскажите плизз уважаемые что Вы в данном случае делаете?Зависит от...

Когда тупо перечисляем строки в секции connectionStrings, когда отдельного наследника ConfigurationSection реализуем, когда целый GUI для настроек лепим и в базе храним...
...
Рейтинг: 0 / 0
29.07.2015, 12:56
    #39018543
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
skyANAАртем GПодскажите плизз уважаемые что Вы в данном случае делаете?Зависит от...

Когда тупо перечисляем строки в секции connectionStrings, когда отдельного наследника ConfigurationSection реализуем, когда целый GUI для настроек лепим и в базе храним...


Ой а как вы это делаете .... коротко

а то я не могу ни воспользоваться не наследовать от System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection так как EntityFrameworkSection Friend
...
Рейтинг: 0 / 0
29.07.2015, 13:07
    #39018563
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
когда писал как вы это делаете имел ввиду вот это автор когда отдельного наследника ConfigurationSection реализуем
...
Рейтинг: 0 / 0
29.07.2015, 15:59
    #39018818
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
AxeleronАртем GОчень не хочется указывать ConnectionString в App.config | Web.config самого приложения.
А придется.

Вот совсем не понимаю. Если это работает в App.config то почему нельзя реализовать классами? А если можно то как?


Вот app.config созданный EF6

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="***" connectionString="data source=***;initial catalog=test1;persist security info=True;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>




Вот как я реализую app.config в классах

Эти строки - defaultConnectionFactory

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>

Вот так

Friend Class DbConfigurationHelper
Inherits Entity.DbConfiguration
Friend Sub New()
SetDefaultConnectionFactory(New Entity.Infrastructure.LocalDbConnectionFactory("mssqllocaldb"))
End Sub
End Class

----------------------------------------

Вот эти строки - providers

<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

Вот так

Friend Class DbConfigurationHelper
Inherits Entity.DbConfiguration
Friend Sub New()
SetProviderServices(Entity.SqlServer.SqlProviderServices.ProviderInvariantName, Entity.SqlServer.SqlProviderServices.Instance)
End Sub
End Class

----------------------------------------

Вот эти строки - connectionString

<connectionStrings>
<add name="***" connectionString="data source=***;initial catalog=test1;persist security info=True;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

Реализую вот так

Friend Class DbConnectionHelper

Friend Shared Function ConnectionString() As String

Dim sqlbuilder As New SqlClient.SqlConnectionStringBuilder

sqlbuilder.DataSource = "***"
sqlbuilder.InitialCatalog = "test1"

sqlbuilder.UserID = "***"
sqlbuilder.Password = "***"

sqlbuilder.PersistSecurityInfo = True
sqlbuilder.MultipleActiveResultSets = True
sqlbuilder.ApplicationName = "EntityFramework"

Return sqlbuilder.ConnectionString

End Function
End Class

----------------------------------------

Остается не реализованным только вот эти строки
Как это сделать пока ума не приложу. Гугл не хотит помогать :)

<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>



Вопрос: а есть класс connectionStrings в который можно добавлять коннекшены как в строке подключения?

<connectionStrings>
<add name="***" connectionString="data source=***;initial catalog=test1;persist security info=True;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
...
Рейтинг: 0 / 0
29.07.2015, 16:36
    #39018866
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
Вот нашел пару ссылок. Выглядят полезно. Надеюсь мне помогут в решение моей проблемы

Нашел Connection String Settings Collection: https://msdn.microsoft.com/en-US/library/2tw134k3(v=vs.80).aspx

Нашел Custom Configuration Sections: https://msdn.microsoft.com/en-us/library/System.Configuration.ConnectionStringSettingsCollection(v=vs.110).aspx
...
Рейтинг: 0 / 0
29.07.2015, 18:40
    #39019010
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
Артем GskyANAпропущено...
Зависит от...

Когда тупо перечисляем строки в секции connectionStrings, когда отдельного наследника ConfigurationSection реализуем, когда целый GUI для настроек лепим и в базе храним...


Ой а как вы это делаете .... коротко

а то я не могу ни воспользоваться не наследовать от System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection так как EntityFrameworkSection Friendесли коротко, то смотрите от какого класса наследуется EntityFrameworkSection и делайте по аналогии
...
Рейтинг: 0 / 0
30.07.2015, 22:54
    #39019939
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF6 DbConfiguration и 2 базы данных
Проект нужно сдавать срочно поэтому оставил временно следующее решение. Уж не знаю на сколько это правильно, но работает.

Так как в проекте часто бывает 2 и более баз данных под которые создаются DLL (слой и репозитории) очень хочется чтобы их конекшены были в их DLLках.

Во всех DLLках создавал 2 класса: Connection & Configuration. Проблема возникала со второй второй длл при попытки считать данные.
Ругалось на Configuration. То что Configuration уже создан но в другом пространстве имен.


Решение пока такое. Вынес Configuration в отдельную DLL. Подключаю ее в каждую DLL которая должна давать доступ к базе.

PS.

Эта схема работает только в самом приложении, а вот если в приложение добавлена DLL в нутри которой должно происходить считывание данных - это уже не работает. Хотя работало когда настройки были в app.config
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / EF6 DbConfiguration и 2 базы данных / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]