MySQLの+ EF + CodeFirst EF6 MySQLの错误之「指定されたキーが長すぎました。最大キー長は「767のバイトです

詳細EF + MSSQL .NETプログラマの標準の多く。プログラマーとして、もちろん、これは、MSSQLデータベース、今日は単にEF + MySQLの話だけではありません。新しい読書をお勧めします。

 

  1]まずとして、MVCプロジェクトを作成します。

 

あなたが作成した後、その後、それぞれMySql.Data、MySql.Data.Entity、EntityFramework(MySql.Dataに注意し、MySql.Data.Entityのバージョンは同じでなければなりません)参照nuget

 

2]データベース接続を作成します

1)モデルのフォルダUserTs.csを作成します。

パブリッククラスUserTs 
    { 
        [キー] 
        // ID 
        パブリック文字列ID {取得します。セットする; } 
        //姓名
        パブリック文字列cusName {取得します。セットする; } 
    }

  

2)次に、MYDBContextを作成します。

//コンテキストデータベース
    パブリッククラスMYDBContext:DbContext 
    { 
        パブリックMYDBContext() ベース( "名前= conncodefirst")
        { 
        } 

        公共DbSet <UserTs>顧客{取得または設定;} 
    }

3)あなたは、データベースに生成されたテーブルを参照することができ、web.configファイルで実行するために以下のコード生成を追加します。

<スタートアップ> 
    <supportedRuntimeバージョン= " V4.0 " SKU = " .NETFramework、バージョン= V4.0 " /> 
  </スタートアップ> 
  <のconnectionStrings> 
    の<add名= " conncodefirst "たconnectionString = " サーバー= localhostの;ポート= 3306 ; UID =ルート; PWD = Ee123;データベース= MYsqlTs " providerNameで= " MySql.Data.MySqlClient " /> 
  </のconnectionStrings>

3つの一般に使用されるコマンド

まず、我々は以下の3つのコマンドを実行し、データベースを作成します。
移行-EnableAutomaticMigrations-1.Enable
2.Add-移行InitialCreate
3.Update、データベース-Verbose

 

エラーがあります

 

 

コンフィギュレーション・クラス生成フレーズでプラス

この .SetSqlGenerator(" MySql.Data.MySqlClient " MySql.Data.Entity.MySqlMigrationSqlGenerator());

別のエラー

 

 

EF6 MySQLの错误之「指定されたキーが長すぎました。最大キー長は「767のバイトです

 

 

エラーの上に作成されたインデックスが発生し、大きなフィールド(又は複数フィールドインデックスの組み合わせ)は、マルチバイト文字セットのような制限テーブルインデックスフィールドの長さに起因するMySQLのInnoDBエンジンは、767バイトです。

文字セットタイプフィールドの例にUtf8mb4列:文字の文字あたり4分の767 = 191バイトなので、VARCHAR(255)またはchar:utf8mb4 4バイト文字がサポートインデックスフィールドのデフォルトの最大長さに設定されています(255)インデックスは、タイプフィールドを作成するために失敗します。

 

ソリューション:

1. NuGetはMySQL.Data.Entitiesを参照します。

2.であなたのDbContextのコードを追加します。

 

 

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class MyContext : DbContext
    {
        public MyContext() : this() { }

        static MyContext ()
        {
            DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
        }
    }

 

问题解决

 

 

由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误。

以 utf8mb4 字符集 字符串类型字段为例:utf8mb4 是 4 字节字符集,则默认支持的索引字段最大长度是: 767 字节 / 4 字节每字符 = 191 字符,因此在 varchar(255) 或 char(255) 类型字段上创建索引会失败。

 

解决方法:

1.使用NuGet引用MySQL.Data.Entities。

2.在你的DbContext里添加代码:

 

 

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class MyContext : DbContext
    {
        public MyContext() : this() { }

        static MyContext ()
        {
            DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
        }
    }

 

おすすめ

転載: www.cnblogs.com/owenzh/p/11591814.html