[EF]vs15+ef6+mysql code first方式

來源:互聯網
上載者:User

標籤:

寫在前面

前面有篇文章,嘗試了db first方式,但不知道是什麼原因一直沒有成功,到最後也沒解決,今天就嘗試下code first的方式。

[EF]vs15+ef6+mysql這個問題,你遇到過嗎?

一個例子

步驟

  1. mysql-for-visualstudio-1.2.4.msi 下載該檔案,然後運行安裝(如果沒安裝,請先安裝)。
  2. Connector/Net 下載該檔案,並安裝(如果沒安裝,請先安裝)
  3. 使用Nuget安裝EF
  4. 使用Nuget提供者。

在上面的步驟完成後,修改web.config檔案,內容如下:

<?xml version="1.0" encoding="utf-8"?><configuration>  <configSections>    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />  </configSections>  <startup>    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />  </startup>  <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">      <parameters>        <parameter value="mssqllocaldb" />      </parameters>    </defaultConnectionFactory>    <providers>      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />    </providers>  </entityFramework>  <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, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />    </DbProviderFactories>  </system.data>  <connectionStrings>    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myshop;user id=sa;password=sa;" providerName="MySql.Data.MySqlClient"/>  </connectionStrings></configuration>

注意entityFramework 節點,預設是不會有codeConfigurationType屬性的,請添加。否則會出現下面的錯誤:Specified key was too long; max key length is 767 bytes

測試

實體類

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Wolfy.Ef_MySql_CodeFirst{    public class Product    {        public int Id { set; get; }        [MaxLength(128)]        public string Name { set; get; }        [MaxLength(128)]        public string Category { set; get; }        public decimal Price { set; get; }        public DateTime CreateDate { set; get; }    }}

插入資訊

using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Wolfy.Ef_MySql_CodeFirst{    class Program    {        static void Main(string[] args)        {            var dbContext = new MyContext();            IDatabaseInitializer<MyContext> dbInitializer = null;            if (dbContext.Database.Exists())            {                //如果資料庫已經存在                dbInitializer = new DropCreateDatabaseIfModelChanges<MyContext>();            }            else            {                //總是先刪除然後再建立                dbInitializer = new DropCreateDatabaseAlways<MyContext>();            }                        //Database.SetInitializer(dbInitializer);
dbInitializer.InitializeDatabase(dbContext); dbContext.Products.Add(new Product() { CreateDate = DateTime.Now.AddDays(1), Name = "南孚電池", Category = "生活用品", Price = 3 }); dbContext.SaveChanges(); } }}

還有一個錯誤經常出現

Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations.

大概意思是:不能檢查模型的相容性,因為資料庫不包含模型中繼資料。在使用code first或者code fisrt遷移進行資料庫建立的時候需要檢查模型的相容性。

此時,雖然產生了表_migrationhistory,但是該表內容為空白。

這個時候可以將資料庫刪除,重建就可以解決。

其中表_migrationhistory為建立曆史表。

Products表

發現添加的資料中中文為亂碼,這是因為mysql預設的字元集為latin

關於亂碼的解決方案很多,你可以修改資料庫的字元集,或者資料表的字元集。也可以這樣,修改連接字串:

  <connectionStrings>    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myshop;user id=sa;password=sa;charset=utf8" providerName="MySql.Data.MySqlClient"/>  </connectionStrings>

 

 總結

折騰了一上午,一個簡單的demo出來了。

[EF]vs15+ef6+mysql code first方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.