arn*_*nes 6 c# mysql entity-framework
我正在使用实体框架,在我的解决方案中有9个项目,它将扩大.我的问题是在.config文件中声明连接字符串.当我这样做时,我必须为4-5个项目声明连接字符串,当我想要更改我的连接时,更改ConnectionStrings将成为4或5个项目的义务.我想在DbContext构造函数中设置连接字符串.DbContext可以为我提供这种能力,但我无法定义providerName.So上下文的dbconnection自动使用SqlClient但我想使用MySql提供程序.我的连接字符串是:
"Server=localhost;Database=xxx;Uid=auth_windows;Persist Security Info=True;User=root;Password=yyyyyy;"
Run Code Online (Sandbox Code Playgroud)
此外,我无法在连接字符串中指定提供程序名称,如"Provider = MySql.Data.MySqlClient".它抛出异常"不支持Provider关键字".
我正在改变我的问题,以便更容易理解.
总之我想要这个.
public class XxContext : DbContext
{
public XxContext()
{
this.Database.Connection.Provider = "MySql.Data.MySqlClient";
this.Database.Connection.ConnectionString = "Server=localhost bla bla bla";
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何声明你应该使用MySql.Data.MySqlClient(没有配置文件).可能吗 ?如果是,我该怎么办?
您的是与对象一起使用的连接字符串SqlConnection
。由于这些对象仅支持 SQL Server,因此您不能使用该Provider
关键字。此外,由于您使用的是 EF,因此需要指定不同的连接字符串才能使用数据库模型、上下文和关键字Provider
。典型的EF 连接字符串是:
<connectionStrings>
<add name="AdventureWorksEntities"
connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
multipleactiveresultsets=true'" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
为了使用 MySQL 提供程序,请考虑此答案中提供的以下步骤:
Entity Framework 6 提供了一些方便的细微更改,有助于使 MySQL 正常工作并创建动态数据库连接。让 MySQL 与实体框架 6 一起使用
首先,在我回答这个问题时,唯一与 EF6 兼容的 .Net 连接器驱动程序是 MySQL .Net Connectior 6.8.1(Beta 开发版本),可以在 MySQL 官方网站上找到它。
安装后,从 Visual Studio 解决方案中引用以下文件:
Run Code Online (Sandbox Code Playgroud)Mysql.Data.dll Mysql.Data.Entity.EF6.dll
您还需要将这些文件复制到项目在构建期间可以访问的某个位置,例如 bin 目录。
接下来,您需要将一些项目添加到您的 Web.config(或 App.config,如果基于桌面)文件中。
连接字符串:
<connectionStrings>
<add name="mysqlCon"
connectionString="Server=localhost;Database=dbName;Uid=username;Pwd=password"
providerName="MySql.Data.MySqlClient" /> </connectionStrings>
Run Code Online (Sandbox Code Playgroud)
还可以在 和 节点内添加提供程序(在处理动态定义的数据库时,这是我答案的第二部分中绝对必须的),您可以更改节点:
<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers> </entityFramework>
Run Code Online (Sandbox Code Playgroud)
如果更改默认 sql server 连接的 defaultConnectionFactory,请不要忘记删除嵌套在 defaultConnectionFactory 节点中的节点。MysqlConnectionFactory 的构造函数不接受任何参数,如果参数仍然存在,则会失败。
归档时间: |
|
查看次数: |
19245 次 |
最近记录: |