vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver
在開發(fā)的初期個(gè)人認(rèn)為因VS與Sqlserver的配合很默契,即可以方便的實(shí)現(xiàn)Code First,又可以使用SqlServer Manager很漂亮的進(jìn)行建模與變更,也許是個(gè)人的使用習(xí)慣MS的界面做的很好,乎開源的產(chǎn)品美感上都追不上商用版。 所以個(gè)人比較喜歡的開發(fā)流程是初次開發(fā)以
在開發(fā)的初期個(gè)人認(rèn)為因VS與Sqlserver的配合很默契,即可以方便的實(shí)現(xiàn)Code First,又可以使用SqlServer Manager很漂亮的進(jìn)行建模與變更,也許是個(gè)人的使用習(xí)慣MS的界面做的很好,似乎開源的產(chǎn)品美感上都追不上商用版。
所以個(gè)人比較喜歡的開發(fā)流程是初次開發(fā)以SqlServer Manager進(jìn)行數(shù)據(jù)庫建模,初步建構(gòu)業(yè)務(wù)邏輯;
其次使用Vs的Entity FrameWork 快速的建立起ROM;
最后當(dāng)開發(fā)進(jìn)行到一定程度時(shí)再進(jìn)行數(shù)據(jù)庫遷移,把SqlServer 轉(zhuǎn)換為MySql。
一、環(huán)境:Win 8.1 + Vs2012 + MysqlServer 5.7 + WorkBench 6.0 CE
注意事項(xiàng):
1. 在某種怪異的情況下Win 8.1 + vs2012 +mysql 5.7 此種搭配是無法使用的,在StackOverFlow中也有很多碼友們,包括身邊的同事也都有遇到過類似問題,
現(xiàn)象是在Win8.1下安裝mysql5.7 時(shí),mysql for vs2012 與 mysql connection net 5.7無法正常安裝,即使卸載Mysql也無用,自然在Vs2012中添加Ado.net entity model時(shí)未有Mysql conncetion集成到Vs中,但往往在Vs的SqlServer Explore中你可以添加Mysql,但不要試圖填寫conncetion string,因?yàn)槟菢訒屇先思襐s崩潰。
原因可能是Mysql 在配合MS的新家伙Win 8.1 系統(tǒng)時(shí)有Bug存在。
解決辦法:此種情況并非每次都會出現(xiàn),但出現(xiàn)以后很難解決,如果哪位碼友知道請賜教;重裝系統(tǒng)或者自己運(yùn)氣好,軟件自動修復(fù)了。
2.使用WorkBench可以很方便的進(jìn)行數(shù)據(jù)庫遷移,很人性化,自動把SqlServer轉(zhuǎn)為MySql,但某些字段的轉(zhuǎn)換會失敗,需要手動修復(fù)了。
3.在Vs連接Mysql時(shí)不要使用Root,盡量配置以項(xiàng)目為區(qū)分的私有帳戶,這樣可以最大化的實(shí)現(xiàn)自定義,配置為允許遠(yuǎn)程連接的即可。
4.在VS2012創(chuàng)建MySql的Ado.net entity framework時(shí)生成的實(shí)體全是小寫,會使原有建立在SqlServer實(shí)體化基礎(chǔ)上的代碼出現(xiàn)問題,木有關(guān)系,把原來的Copy過來即可,Simple.
不過還有一個(gè)辦法就是使用DbLinq(https://code.google.com/p/dblinq2007/)來替代EF,但不建議使用在正規(guī)場合,學(xué)習(xí)可以,因?yàn)槠渥罱K版本是2007年,此后再無更新。
二、流程:
數(shù)據(jù)庫遷移:直接使用WorkBench進(jìn)行數(shù)據(jù)庫從SqlServer 遷移到MySql。
代碼遷移:
1. 確保成功安裝Connector NET 6.7.4 與 MySQL for Visual Studio 1.0.2
2. 創(chuàng)建MVC3 Web Application,添加引用從NuGet或者M(jìn)ySQL for Visual Studio 1.0.2中獲取最新版本的三個(gè)DLL:MySql.Data,MySql.Data.Entity,MySql.Web。
3. 如果以上步驟OK的話,當(dāng)向項(xiàng)目中添加Ado.net entity framework時(shí),New Connection 就可以看到Mysql database選項(xiàng),否則你就倒霉了,可以參考環(huán)境->注意事項(xiàng);
4. 修改Web.Config,需要增加及修改的示例代碼如下:
connectionStrings>
providers>
membership>
providers>
profile>
providers>
roleManager>
providers>
sessionState>
system.web>
DbProviderFactories>
system.data>
5. 到目前為止,正常情況下或者使用CodeFirst或者使用Migration,應(yīng)該都可以實(shí)現(xiàn)MVC3 在MySql下登錄和注冊模塊的功能。:)恭喜已經(jīng)接近成功了。
6. 之所以不直接使用MVC4是因?yàn)镸ySql 對MVC4的支持并不是太好,時(shí)不時(shí)會出現(xiàn)很多問題;所以建議使用MVC3按以上步驟調(diào)試OK后再往MVC4上轉(zhuǎn)換;所謂轉(zhuǎn)換只是用MVC3的相關(guān)權(quán)限功能模塊來替換掉MVC4的,主要包括AccountController,AccountModels,相關(guān)View,Global.asax。
1 protected voidApplication_Start()2 {3 AreaRegistration.RegisterAllAreas();4
5 WebApiConfig.Register(GlobalConfiguration.Configuration);6 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);7 RouteConfig.RegisterRoutes(RouteTable.Routes);8 BundleTable.EnableOptimizations = true;9 BundleConfig.RegisterBundles(BundleTable.Bundles);10 AuthConfig.RegisterAuth();11 BCRMonitor.RegisterGlobalMonitor(Server.MapPath(string.Format("~/photos/")));12
13 //AreaRegistration.RegisterAllAreas();14
15 //Use LocalDB for Entity Framework by default16 //Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");17
18 //RegisterGlobalFilters(GlobalFilters.Filters);19 //RegisterRoutes(RouteTable.Routes);
20 }
7. 可能在上一步驟進(jìn)行過程中會出現(xiàn)一些問題,耐心調(diào)試就OK了。
注意事項(xiàng):
a. mysql出現(xiàn)異常“ Every derived table must have its own alias” 此種問題在linq to mysql 的過程中也可能會遇到,只是linq to sql本身就是MS為Sqlserver開發(fā)的,當(dāng)涉及到多表綜合查詢時(shí),對mysql的支持就不太好了,如語句 return GetAll("").Where(x => x.Id == id).Take(1).SingleOrDefault(); 就會引起此類問題,可以換種linq寫法規(guī)避。
b. 在使用NuGet引用MySql.Data.Entity時(shí)注意其版本需要和packages.config,web.config,MySQL for Visual Studio 1.0.2 等中一致,否則也會提示錯誤:
System.IO.FileNotFoundException: 未能加載文件或程序集"MySql.Data, Version=6.1.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"或它的某一個(gè)依賴項(xiàng)。系統(tǒng)找不到指定的文件。
c. System.ArgumentException: 不支持關(guān)鍵字: “metadata”。 錯誤原因可能是connection string provider 未修改成 providerName="MySql.Data.MySqlClient"
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請注明出處,感謝您的尊重!
總結(jié)
以上是生活随笔為你收集整理的vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 字符串 截取字母_MySQL
- 下一篇: python缩进说法_【多选题】关于Py