我正在使用EF与MySql结合使用ASP.net MVC项目。现在这本身就可以了,但我也想引用另一个使用EF和SQL的类库。
当我引用库时,EF似乎对每个DbContext使用的提供程序感到困惑。
在我的MySql DbContext上我有以下属性以告诉EF这个DbContext应该由MySql提供者处理:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
现在在SQL DbContext上,我没有属性。我应该把一个放在那里,如果是这样的话?我对此事进行了一些搜索,但无法在任何地方找到正确答案。
目前,我收到以下错误:
实体框架使用默认的DbConfiguration实例 在' MySqlEFConfiguration'之前类型被发现。一个例子 ' MySqlEFConfiguration'必须在使用前在应用程序启动时设置 任何实体框架功能或必须在 应用程序的配置文件。
这很简单,因为在MySql之前使用了SQL上下文,但我似乎无法找到解决方法。
所以问题是什么是最佳实践'处理这个?或者这是我应该避免的,在同一个项目中组合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>
我在DbProviderFactories上看到它唯一的说法是Mysql。
答案 0 :(得分:0)
你有多少DbContexts并不重要(在实体框架6中)。只需将连接字符串放在启动项目的appConfig或webConfig中即可。
appConfig的示例,其中两个connectionString与Ef 6.01&amp; Sql Server和My SQL
<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>
<add name="MySqlDB" connectionString="Your My SQL ConnectionString" providerName="My Sql Provider" />
<add name="SqlDB" connectionString="Your SQL ConnectionString" providerName="Sql Provider" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
</entityFramework>
MySql DbContext
public class MySqlContext : DbContext
{
public MySqlContext() : base("MySqlDB")
{
this.Configuration.LazyLoadingEnabled = false;
}
//DbSets....
}
SQL DbContext
public class SqlContext : DbContext
{
public SqlContext() : base("SqlDB")
{
Configuration.LazyLoadingEnabled = false;
}
//DbSets....
}