2016-03-24 9 views
0

これは、tutorialの後に、mysqlに接続してこのエラーが発生するmvcアプリケーションを作成しています。Entity FrameworkからMySQLを接続するときのエラー

型「MySql.Data.MySqlClient.MySqlException」の例外がMySql.Data.dllで発生したが、ユーザーコードで処理されなかった、追加情報:指定されたキーが長すぎました。キーの最大長は1000バイトです

私のmysqlデータベースとは別に、チュートリアルのすべてを辿って、紺碧ではなくゴダディーになっています。 VS2013の新しいデータベースと新しいMVCアプリケーション.Net 4.5.1。 EF 6.1.3およびMySQL.Data.Entityのバージョンは6.9.8です。

この行にはエラーがあります。

同じ問題がある人もいますが、このチュートリアルのようにSetInitializerを使用していない人がいます。私が間違っていることを指摘できる人もいれば幸いです。

コンテキストクラス上DbConfigurationTypeAttributeを追加:設定ファイル内のDbConfigurationタイプを設定し、アプリケーションの起動 でDbConfiguration.SetConfiguration(new MySqlEFConfiguration())を呼び出す

[DbConfigurationType(typeof(MySqlEFConfiguration))] 

public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext> 
    { 

     public void InitializeDatabase(ApplicationDbContext context) 
     { 
      if (!context.Database.Exists()) 
      { 
       // if database did not exist before - create it 
       context.Database.Create(); 
      } 
      else 
      { 
       // query to check if MigrationHistory table is present in the database 
       var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
       string.Format(
        "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'", "users")); 

       // if MigrationHistory table is not there (which is the case first time we run) - create it 
       if (migrationHistoryTableExists.FirstOrDefault() == 0) 
       { 
        context.Database.Delete(); 
        context.Database.Create(); 
       } 
      } 
     } 
    } 

public class MySqlHistoryContext : HistoryContext 
{ 
    public MySqlHistoryContext(
       DbConnection existingConnection, 
       string defaultSchema) 
     : base(existingConnection, defaultSchema) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(100).IsRequired(); 
     modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired(); 
    } 
} 

public class MySqlConfiguration : DbConfiguration 
{ 
    public MySqlConfiguration() 
    { 
     SetHistoryContext(
     "MySql.Data.MySqlClient", (conn, schema) => new  MySqlHistoryContext(conn, schema)); 
    } 
} 

public class ApplicationUser : IdentityUser 
    { 
     public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
     { 
      // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
      var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
      // Add custom user claims here 
      return userIdentity; 
     } 
    } 

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
     static ApplicationDbContext() 
     { 
      Database.SetInitializer(new MySqlInitializer()); 
     } 

    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

答えて

0

これは、以下の3つの方法で行うことができます。

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"> 
+0

ありがとうあなたの返信。コンテキストクラスでは、IdentityModels.csのApplicationDbContextクラスを意味しますか?私はそれを試みたと私は再び同じようなエラーが、今度は1000バイトの代わりに767バイトを言っている。 – lawphotog

+0

Global.asaxで2番目のオプションを呼び出してみましたが、SetInitializerメソッドを呼び出すときにこのエラーが表示されます。 'MySqlEFConfiguration'のインスタンスが設定されましたが、このタイプは 'ApplicationDbContext'コンテキストと同じアセンブリで検出されませんでした。 – lawphotog

+0

3番目のオプションは、最初のオプションと同じエラーを返します。任意の提案エミネム? – lawphotog

関連する問題