日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

MVC4,MVC3,VS2012+ entity framework Migration

系統(tǒng) 2196 0

MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver to Mysql

在開發(fā)的初期個人認為因VS與Sqlserver的配合很默契,即可以方便的實現(xiàn)Code First,又可以使用SqlServer Manager很漂亮的進行建模與變更,也許是個人的使用習慣MS的界面做的很好,似乎開源的產(chǎn)品美感上都追不上商用版。

所以個人比較喜歡的開發(fā)流程是初次開發(fā)以SqlServer Manager進行數(shù)據(jù)庫建模,初步建構(gòu)業(yè)務(wù)邏輯;

其次使用Vs的Entity FrameWork 快速的建立起ROM;

最后當開發(fā)進行到一定程度時再進行數(shù)據(jù)庫遷移,把SqlServer 轉(zhuǎn)換為MySql。

一、環(huán)境: Win 8.1 + Vs2012 + MysqlServer 5.7 + WorkBench 6.0 CE?

注意事項:

1. 在某種怪異的情況下Win 8.1 + vs2012 +mysql 5.7 此種搭配是無法使用的,在StackOverFlow中也有很多碼友們,包括身邊的同事也都有遇到過類似問題,

現(xiàn)象 是在Win8.1下安裝mysql5.7 時,mysql for vs2012 與 mysql connection net 5.7無法正常安裝,即使卸載Mysql也無用,自然在Vs2012中添加Ado.net entity model時未有Mysql conncetion集成到Vs中,但往往在Vs的SqlServer Explore中你可以添加Mysql,但不要試圖填寫conncetion string,因為那樣會讓您老人家Vs崩潰。

原因 可能是Mysql 在配合MS的新家伙Win 8.1 系統(tǒng)時有Bug存在。

解決辦法: 此種情況并非每次都會出現(xiàn),但出現(xiàn)以后很難解決,如果哪位碼友知道請賜教;重裝系統(tǒng)或者自己運氣好,軟件自動修復(fù)了。

2.使用WorkBench可以很方便的進行數(shù)據(jù)庫遷移,很人性化,自動把SqlServer轉(zhuǎn)為MySql,但某些字段的轉(zhuǎn)換會失敗,需要手動修復(fù)了。

3.在Vs連接Mysql時不要使用Root,盡量配置以項目為區(qū)分的私有帳戶,這樣可以最大化的實現(xiàn)自定義,配置為允許遠程連接的即可。

4.在VS2012創(chuàng)建MySql的Ado.net entity framework時生成的實體全是小寫,會使原有建立在SqlServer實體化基礎(chǔ)上的代碼出現(xiàn)問題,木有關(guān)系,把原來的Copy過來即可,Simple.

?不過還有一個辦法就是使用DbLinq( https://code.google.com/p/dblinq2007/ )來替代EF,但不建議使用在正規(guī)場合,學習可以,因為其最終版本是2007年,此后再無更新。

二、流程:

  數(shù)據(jù)庫遷移: 直接使用WorkBench進行數(shù)據(jù)庫從SqlServer 遷移到MySql。

代碼遷移:  

  1. ?確保成功安裝Connector NET 6.7.4 與?MySQL for Visual Studio 1.0.2

2. ?創(chuàng)建 MVC3 ?Web Application,添加引用從NuGet或者MySQL for Visual Studio 1.0.2中獲取最新版本的三個DLL:MySql.Data,MySql.Data.Entity,MySql.Web。

  3. ?如果以上步驟OK的話,當向項目中添加Ado.net entity framework時,New Connection 就可以看到Mysql database選項,否則你就倒霉了,可以參考環(huán)境->注意事項;

  4. ?修改Web.Config,需要增加及修改的示例代碼如下:

      
        <
      
      
        connectionStrings
      
      
        >
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="MySQLConnString"
      
      
        

         connectionString
      
      
        ="Server=192.168.29.157;Port=3306;Database=**;Uid=**;Pwd=**;"
      
      
        

         providerName
      
      
        ="MySql.Data.MySqlClient"
      
      
        />
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="newsoftgatewayEntities"
      
      
        

         connectionString
      
      
        ="metadata=res://*/NewsoftGateWay.csdl|res://*/NewsoftGateWay.ssdl|res://*/NewsoftGateWay.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.29.157;user id=**;password=**;database=newsoftgateway&quot;"
      
      
        

         providerName
      
      
        ="System.Data.EntityClient"
      
      
        />
      
      
        </
      
      
        connectionStrings
      
      
        >
      
    
      
        <
      
      
        system.web
      
      
        >
      
      
        <
      
      
        membership 
      
      
        defaultProvider
      
      
        ="MySqlMembershipProvider"
      
      
        >
      
      
        <
      
      
        providers
      
      
        >
      
      
        <
      
      
        clear 
      
      
        />
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="MySqlMembershipProvider"
      
      
        

             type
      
      
        ="MySql.Web.Security.MySQLMembershipProvider,MySql.Web,Version=6.7.4,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
      
      
        

             connectionStringName
      
      
        ="MySQLConnString"
      
      
         enablePasswordRetrieval
      
      
        ="false"
      
      
         enablePasswordReset
      
      
        ="true"
      
      
        

             requiresQuestionAndAnswer
      
      
        ="false"
      
      
         requiresUniqueEmail
      
      
        ="true"
      
      
         passwordFormat
      
      
        ="Hashed"
      
      
        

             maxInvalidPasswordAttempts
      
      
        ="5"
      
      
         minRequiredPasswordLength
      
      
        ="6"
      
      
         minRequiredNonalphanumericCharacters
      
      
        ="0"
      
      
        

             passwordAttemptWindow
      
      
        ="10"
      
      
         applicationName
      
      
        ="/"
      
      
         autogenerateschema
      
      
        ="true"
      
      
        />
      
      
        </
      
      
        providers
      
      
        >
      
      
        </
      
      
        membership
      
      
        >
      
      
        <
      
      
        profile
      
      
        >
      
      
        <
      
      
        providers
      
      
        >
      
      
        <
      
      
        clear 
      
      
        />
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="MySQLProfileProvider"
      
      
        

             type
      
      
        ="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.7.4.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
      
      
        

             connectionStringName
      
      
        ="MySQLConnString"
      
      
         applicationName
      
      
        ="/"
      
      
        />
      
      
        </
      
      
        providers
      
      
        >
      
      
        </
      
      
        profile
      
      
        >
      
      
        <
      
      
        roleManager 
      
      
        enabled
      
      
        ="true"
      
      
         defaultProvider
      
      
        ="MySQLRoleProvider"
      
      
        >
      
      
        <
      
      
        providers
      
      
        >
      
      
        <
      
      
        clear 
      
      
        />
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="MySQLRoleProvider"
      
      
        

             type
      
      
        ="MySql.Web.Security.MySQLRoleProvider, MySql.Web,Version=6.7.4.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
      
      
        

             connectionStringName
      
      
        ="MySQLConnString"
      
      
         applicationName
      
      
        ="/"
      
      
        />
      
      
        </
      
      
        providers
      
      
        >
      
      
        </
      
      
        roleManager
      
      
        >
      
      
        <
      
      
        sessionState 
      
      
        mode
      
      
        ="InProc"
      
      
         customProvider
      
      
        ="MysqlSessionProvider"
      
      
        >
      
      
        <
      
      
        providers
      
      
        >
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="MysqlSessionProvider"
      
      
        

             type
      
      
        ="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
      
      
        

             connectionStringName
      
      
        ="MySQLConnString"
      
      
        />
      
      
        </
      
      
        providers
      
      
        >
      
      
        </
      
      
        sessionState
      
      
        >
      
      
        </
      
      
        system.web
      
      
        >
      
      
        <
      
      
        system.data
      
      
        >
      
      
        <
      
      
        DbProviderFactories
      
      
        >
      
      
        <
      
      
        remove 
      
      
        invariant
      
      
        ="MySql.Data.MySqlClient"
      
      
        />
      
      
        <
      
      
        add 
      
      
        name
      
      
        ="MySQL Data Provider"
      
      
         invariant
      
      
        ="MySql.Data.MySqlClient"
      
      
        

           description
      
      
        =".Net Framework Data Provider for MySQL"
      
      
        

           type
      
      
        ="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data"
      
      
        />
      
      
        </
      
      
        DbProviderFactories
      
      
        >
      
      
        </
      
      
        system.data
      
      
        >
      
    

  5. ?到目前為止,正常情況下或者使用CodeFirst或者使用Migration,應(yīng)該都可以實現(xiàn) MVC3 ?在MySql下登錄和注冊模塊的功能。:)恭喜已經(jīng)接近成功了。

  6. ?之所以不直接使用MVC4是因為MySql 對MVC4的支持并不是太好,時不時會出現(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
      
      
        void
      
      
         Application_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 default


      
      
        16
      
      
        //
      
      
         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. 可能在上一步驟進行過程中會出現(xiàn)一些問題,耐心調(diào)試就OK了。

  注意事項:

    a.  mysql出現(xiàn)異常“ Every derived table must have its own alias” 此種問題在linq to mysql 的過程中也可能會遇到,只是linq to sql本身就是MS為Sqlserver開發(fā)的,當涉及到多表綜合查詢時,對mysql的支持就不太好了,如語句?return GetAll("").Where(x => x.Id == id).Take(1).SingleOrDefault(); 就會引起此類問題,可以換種linq寫法規(guī)避。

  ?  b.  在使用NuGet引用MySql.Data.Entity時注意其版本需要和packages.config,web.config,MySQL for Visual Studio 1.0.2 等中一致,否則也會提示錯誤:

1
System.IO.FileNotFoundException: 未能加載文件或程序集 "MySql.Data, Version=6.1.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" 或它的某一個依賴項。系統(tǒng)找不到指定的文件。

    c.  System.ArgumentException: 不支持關(guān)鍵字: “metadata”。 錯誤原因可能是connection string provider 未修改成?providerName="MySql.Data.MySqlClient" ?

世界是你們的,也是我們的,但歸根結(jié)底是他們的。
?
分類:? .NET

MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver to Mysql


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 宜君县| 平潭县| 梁河县| 刚察县| 三穗县| 鄂托克前旗| 喀喇沁旗| 上高县| 滨州市| 萨嘎县| 荔波县| 灌南县| 察哈| 稷山县| 永善县| 浦城县| 静宁县| 琼海市| 南皮县| 宜宾市| 高淳县| 略阳县| 普陀区| 桐梓县| 高碑店市| 喜德县| 仪征市| 内黄县| 泾阳县| 南涧| 长春市| 邹平县| 彭泽县| 翁源县| 阳山县| 安阳市| 盘山县| 香港| 东阿县| 二连浩特市| 乌审旗|