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