Я работаю над проектом ASP.net MVC с использованием EF в сочетании с MySql. Теперь это работает отлично, но я также хочу ссылаться на другую библиотеку классов, которая использует EF с SQL.Использование EF DbContext с mysql и sql в одном проекте
Когда я ссылаюсь на библиотеку, EF, похоже, путается с тем, какой провайдер должен использовать для каждого DbContext.
На мой MySql DbContext У меня есть следующий атрибут для того, чтобы сказать EF это DbContext должен быть обработан провайдером MySql:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
Теперь на SQL DbContext, у меня нет атрибута. Должен ли я разместить его там, и если да, то какой? Я сделал несколько поисков по этому вопросу, но не смог найти правильный ответ нигде.
В настоящее время я получаю следующее сообщение об ошибке:
The default DbConfiguration instance was used by the Entity Framework before the 'MySqlEFConfiguration' type was discovered. An instance of 'MySqlEFConfiguration' must be set at application start before using any Entity Framework features or must be registered in the application's config file.
Это довольно прямо вперед, поскольку контекст SQL используется перед MySql один, но я не могу найти исправление по этому вопросу.
Таким образом, вопрос заключается в том, что было бы «Лучшей практикой» при обработке этого? Или это то, чего я должен избегать, объединяя 2 DbContexts в одном проекте.
Спасибо, продвинутый!
MySql DbContext
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MySqlContext : DbContext
{
public MySqlContext() : base("name=MySqlContext")
{
this.Configuration.LazyLoadingEnabled = false;
}
//DbSets....
}
SQL DbContext
public class SqlContext : DbContext
{
public SqlContext() : base("name=SqlContext")
{
Configuration.LazyLoadingEnabled = false;
}
//DbSets....
}
Web.config:
<connectionStrings>
<add name="SqlContext" connectionString="some connectionString" providerName="System.Data.SqlClient" />
<add name="MysqlContext" connectionString="some connectionString" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<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" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Я вижу, о n DbProviderFactories это единственное высказывание Mysql.
прекрасно использовать несколько DbContext. Можете ли вы опубликовать свой web.config? –
Это может вам помочь: http://stackoverflow.com/questions/24766068/entityframework-two-different-providers-on-the-same-config-file –
У меня нет среды для проверки в руке. Попробуйте поместить это поверх вашего SqlContext: '[DbConfigurationType (typeof (System.Data.Entity.DbConfiguration))] –