mysql数据库连接6_c# – 实体框架的动态MySQL数据库连接6
實(shí)體框架6提供了一些方便的細(xì)微變化,有助于使MySQL工作,并創(chuàng)建動(dòng)態(tài)數(shù)據(jù)庫(kù)連接。
使用Entity Framework 6獲取MySQL
首先,在我回答這個(gè)問(wèn)題的日期,與EF6兼容的唯一的.Net連接器驅(qū)動(dòng)程序是MySQL .Net Connectior 6.8.1(Beta開(kāi)發(fā)版本),可以找到at the official MySQL website here。
安裝后,從Visual Studio解決方案中引用以下文件:
> Mysql.Data.dll
> Mysql.Data.Entity.EF6.dll
您還需要將這些文件復(fù)制到構(gòu)建期間可以訪(fǎng)問(wèn)項(xiàng)目的位置,例如bin目錄。
接下來(lái),您需要添加一些項(xiàng)目到您的Web.config(或App.config如果在基于桌面的)文件。
連接字符串:
connectionString="Server=localhost;Database=dbName;Uid=username;Pwd=password"
providerName="MySql.Data.MySqlClient" />
另外添加提供者,在< entityFramework />和< providers />節(jié)點(diǎn),可選(在處理動(dòng)態(tài)定義的數(shù)據(jù)庫(kù)時(shí),這是我答案的第二部分絕對(duì)必須的),您可以更改< defaultConnectionFactory />節(jié)點(diǎn):
如果從默認(rèn)的sql server連接更改defaultConnectionFactory,不要忘記刪除< parameter>嵌套在defaultConnectionFactory節(jié)點(diǎn)中的節(jié)點(diǎn)。 MysqlConnectionFactory對(duì)其構(gòu)造函數(shù)不采用任何參數(shù),如果參數(shù)仍然存在,則它將失敗。
在這個(gè)階段,用Entity連接到MySQL很容易,你可以通過(guò)名字來(lái)引用上面的connectionString。請(qǐng)注意,如果通過(guò)名稱(chēng)連接,即使defaultConnectionFactory節(jié)點(diǎn)仍然指向SQL Server(默認(rèn)情況下它),這將會(huì)起作用。
public class ApplicationDbContext: DbContext
{
public ApplicationDbContext() : base("mysqlCon")
{
}
}
這只是正常連接的問(wèn)題:
ApplicationDbContext db = ApplicationDbContext();
連接到動(dòng)態(tài)選擇的數(shù)據(jù)庫(kù)名稱(chēng)
在這一點(diǎn)上,很容易連接到一個(gè)可以作為參數(shù)傳遞的數(shù)據(jù)庫(kù),但是我們需要做一些事情。
重要的提示
If you have not already, you MUST change the defaultConnectionFactory in Web.config if you wish to connect to MySQL
dynamically. Since we will be passing a connection string directly to
the context constructor, it will not know which provider to use and
will turn to its default connection factory unless specified in
web.config. See above on how to do that.
您可以將連接字符串手動(dòng)傳遞給上下文,如下所示:
public ApplicationDbContext() : base("Server:localhost;...")
{
}
但是為了讓它更容易一些,我們可以在設(shè)置mySQL時(shí)對(duì)我們上面提供的連接字符串做一個(gè)小的改動(dòng)。只需添加一個(gè)占位符,如下所示:
現(xiàn)在我們可以構(gòu)建一個(gè)幫助方法并更改ApplicationDbContext類(lèi),如下所示:
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);
}
}
如果您正在使用數(shù)據(jù)庫(kù)遷移,以下步驟很重要
如果您正在使用遷移,您將發(fā)現(xiàn)ApplicationDbContext將被框架傳遞給您的Seed方法,它將失敗,因?yàn)樗粫?huì)傳入我們?yōu)閿?shù)據(jù)庫(kù)名稱(chēng)輸入的參數(shù)。
將下面的類(lèi)添加到上下文類(lèi)的底部(或任何地方)來(lái)解決這個(gè)問(wèn)題。
public class MigrationsContextFactory : IDbContextFactory
{
public ApplicationDbContext Create()
{
return new ApplicationDbContext("developmentdb");
}
}
您的代碼優(yōu)先遷移和種子方法現(xiàn)在將定位到MySQL數(shù)據(jù)庫(kù)中的developmentdb模式。
希望這有助于某人:)
總結(jié)
以上是生活随笔為你收集整理的mysql数据库连接6_c# – 实体框架的动态MySQL数据库连接6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python公里转海里_海里、公里、英里
- 下一篇: 数据库mysql_row_MYSQL数据