0
これは、tutorialの後に、mysqlに接続してこのエラーが発生するmvcアプリケーションを作成しています。Entity FrameworkからMySQLを接続するときのエラー
私のmysqlデータベースとは別に、チュートリアルのすべてを辿って、紺碧ではなくゴダディーになっています。 VS2013の新しいデータベースと新しいMVCアプリケーション.Net 4.5.1。 EF 6.1.3およびMySQL.Data.Entityのバージョンは6.9.8です。型「MySql.Data.MySqlClient.MySqlException」の例外がMySql.Data.dllで発生したが、ユーザーコードで処理されなかった、追加情報:指定されたキーが長すぎました。キーの最大長は1000バイトです
この行にはエラーがあります。
同じ問題がある人もいますが、このチュートリアルのように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();
}
}
ありがとうあなたの返信。コンテキストクラスでは、IdentityModels.csのApplicationDbContextクラスを意味しますか?私はそれを試みたと私は再び同じようなエラーが、今度は1000バイトの代わりに767バイトを言っている。 – lawphotog
Global.asaxで2番目のオプションを呼び出してみましたが、SetInitializerメソッドを呼び出すときにこのエラーが表示されます。 'MySqlEFConfiguration'のインスタンスが設定されましたが、このタイプは 'ApplicationDbContext'コンテキストと同じアセンブリで検出されませんでした。 – lawphotog
3番目のオプションは、最初のオプションと同じエラーを返します。任意の提案エミネム? – lawphotog