之前本人在用MVC4+EF5+MYSQL搭建自己的博客。地址:www.seesharply.com;遇到一個問題,就是采用ef的codefirst模式來編寫程序,我們一般會在程序開發初期直接在global.asax里面加上
System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<Farm.Models.FarmContext>());//每次在模型更改的時候重建數據庫
或者是、
System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseAlways<Farm.Models.FarmContext>());//每次都重建數據庫
在開發初期這樣是可取的,我們可以一邊完善自己的模型類,然后不停更新數據庫;
但是當我們進行到中期,已經產生了一些數據的時候,我們不想每次更新模型然后又要清空數據重建,這個時候,EF為我們提供了Magriation,可以在codeFirst的模式下,當模型發生更改的時候遷移數據,不得不說,EF和微軟自家的SQlServer配合的相當默契,這里就不再贅述,這里給一個連接就好:http://www.cnblogs.com/libingql/p/3330880.html
但是EF和MYSQL就沒那么好過了,再EF5下本人也是吃了不少苦,然后還是沒弄出來,這里貼出個可能的解決方案連接:http://www.nsilverbullet.net/2012/11/07/6-steps-to-get-entity-framework-5-working-with-mysql-5-5/
如果你點開了以上的連接,你會發現EF5下面配置MYSQl的更新其實是比較麻煩,而且很容易出錯,至少我是這樣,哭暈在廁所;偶然間想到不是有EF6么,於是在EF6中嘗試了下,發現十分簡單;只用按照以下步驟,輕松搞定:
我們先建好項目,寫好模型,僅用於測試:
public class User
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public Blog Blog { get; set; }
}
public class Blog
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Content { get; set; }
}

然后在Nuget上面添加EntityFrameWork,注意,如果你是MVC5的項目可以直接添加控制器,然后選擇帶EF的的視圖,系統會幫你添加EF6,如果是MVC4,請手動到Nuget撒很添加EF6

添加完畢,然后建立控制器


點添加,這里會自動幫你生成一些列視圖操作(不過咱們不需要,需要的兒時那個Context),然后再context類中添加以下代碼

好了,再到配置文件里面添加Mysql的連接字符串,名字就是整個Context類中配置的名字,默認就是contextt類名

好了,好了,這里還需要添加Mysql的conecter,於是我們到Nuget上去添加

運行程序

我們再來查看數據庫

接下來我們執行遷移:首先添加一個log類
public class Log
{
public int Id { get; set; }
public string Message { get; set; }
}
這時候如果直接運行會報錯,我們需要執行遷移;
好了,在程序管理控制台中輸入
Enable-Migrations -EnableAutomaticMigrations
執行成功后會幫你添加

我們再到Context類中添加

重新生成項目之后
然后添加Dbset: public DbSet<Log> Logs { get; set; }
在到程序管理控制台輸入 add-migration LogTable,我們看到程序幫我們生成了這個,

其實內容就是對表的一系列操作
最后,再倒1程序管理控制台輸入 update-database,
執行后,我們來查看數據庫

好了,執行成功,祝你好運(學習中,有什么好的建議歡迎留言:www.seesharply.com)
