EF 6.0 Code First 遷移MySql數據庫,efmysql
一、准備工作
使用NUGET安裝Entity Framework 6,下載MySql Connector/Net 6.9.5
二、創建實體
我們在下面創建了兩個類(博客和文章),並使用了虛擬屬性標識了他們的關系。這使得實體框架具有了延遲加載特性,延遲加載意味著從數據庫加載內容的時候將會自動加載關聯實體的內容(除了我們設置了禁用延遲加載)。

![]()
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
View Code
三、創建Context&生成數據庫
新建一個Blogging類繼承DbContext,在構造函數指定使用的數據庫連接,如果不指定默認是使用MS SQL。

![]()
public class BloggingContext : DbContext
{
public BloggingContext()
: base("MySqlServer")
{ }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
View Code
讀取和寫入數據
運行這個應用程序的時候,EF會自動幫我們創建數據庫如果還沒有創建數據庫。

![]()
class Program
{
static void Main(string[] args)
{
using (BloggingContext db = new BloggingContext())
{
db.Blogs.Add(new Blog { Name = "Another Blog" });
db.SaveChanges();
foreach (var blog in db.Blogs)
{
Console.WriteLine(blog.Name);
}
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
View Code
當執行完成我們就可以去查看生成的數據庫

生成如下

五、更改數據模型
在Package Manager Console輸入 Eable-Migrations 開啟EF遷移功能

運行成功之後會在我們的項目文件下增加Migrations文件夾以及Configuration.cs,這個文件包含遷移Blogging的設置。

對Blogs類增加Url屬性,在剛才的PMC輸入 PM> Add-Migration AddUrl 會報下面錯誤
No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators.
最後在http://stackoverflow.com/questions/15142841/no-entity-framework-provider-found-for-mysql-data-mysqlclient-ado-net-provider找到了答應,需要在Context指定mySql的配置文件

在重新運行上面命令正確生成類文件

其實到了這裡還沒有真正的更新數據庫我們還需要執行
Update-Database -Verbose

查看數據庫已經成功更新

六、Fluent API
我們使用這個API來修改數據庫的表設置

在執行修改的遷移命令

成功更新數據庫

參考文檔https://msdn.microsoft.com/en-us/data/jj193542