栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

实体框架6的动态MySQL数据库连接

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实体框架6的动态MySQL数据库连接

Entity framework 6提供了一些方便的细微更改,这些更改有助于使MySQL正常工作并创建动态数据库连接。

使MySQL与Entity framework 6配合使用

首先,在我回答这个问题之日,与EF6兼容的唯一.Net连接器驱动程序是MySQL .Net Connectior
6.8.1(Beta开发版本),可以在此处访问官方MySQL网站。

安装后,请从Visual Studio解决方案中引用以下文件:

  • 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>

还可以在

<entityframework />
<providers/>
节点内添加提供程序(可选)(这是我的答案的第二部分中的绝对必需,在处理动态定义的数据库时),您可以更改
<defaultConnectionFactory/>
节点:

<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>

如果从默认的sql服务器连接更改defaultConnectionFactory,请不要忘记删除

<parameter>
嵌套在defaultConnectionFactory节点中的节点。MysqlConnectionFactory的构造函数不接受任何参数,如果参数仍然存在,它将失败。

在这个阶段,使用Entity连接到MySQL非常容易,您可以按名称引用上面的connectionString。请注意,如果按名称连接,即使该

defaultConnectionFactory
节点仍然指向SQL
Server(默认情况下也是如此),此操作也将起作用。

public class ApplicationDbContext: DbContext{    public ApplicationDbContext() : base("mysqlCon")    {    }}

这只是正常连接的问题:

ApplicationDbContext db = ApplicationDbContext();

连接到动态选择的数据库名称

在这一点上,很容易连接到我们可以作为参数传递的数据库,但是我们需要做一些事情。

重要的提示

如果还没有,如果希望动态连接到MySQL,则必须在Web.config中更改defaultConnectionFactory。由于我们将直接将连接字符串传递给上下文构造函数,因此除非在web.config中指定,否则它将不知道要使用哪个提供程序,并将转向其默认连接工厂。请参阅上面的操作方法。

您可以像这样手动将连接字符串传递给上下文:

public ApplicationDbContext() : base("Server:localhost;..."){}

但是,为了使其更容易一点,我们可以在设置mySQL时对上面所做的连接字符串进行一些小的更改。只需添加一个占位符,如下所示:

<add name="mysqlCon" connectionString="Server=localhost;Database={0};Uid=username;Pwd=password" providerName="MySql.Data.MySqlClient" />

现在,我们可以构建一个辅助方法并更改ApplicationDbContext类,如下所示:

public class ApplicationDbContext: DbContext{    public ApplicationDbContext(string dbName) : base(GetConnectionString(dbName))    {    }    public static string GetConnectionString(string dbName)    {        // Server=localhost;Database={0};Uid=username;Pwd=password        var connString =  ConfigurationManager.ConnectionStrings["mysqlCon"].ConnectionString.ToString();        return String.Format(connString, dbName);    }}

如果使用数据库迁移,则以下步骤很重要

如果使用迁移,则会发现ApplicationDbContext将由框架传递给您的Seed方法,并且将失败,因为它将不会传递我们为数据库名称输入的参数。

将以下类添加到上下文类的底部(或其他位置)以解决该问题。

public class MigrationsContextFactory : IDbContextFactory<ApplicationDbContext>{    public ApplicationDbContext Create()    {        return new ApplicationDbContext("developmentdb");    }}

现在,您的代码优先迁移和种子方法将针对

developmentdb
MySQL数据库中的架构。

希望这可以帮助某人:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号