MySQL Entity Framework 未创建表
MySQL Entity Framework Tables are not created
遵循本指南:http://www.asp.net/identity/overview/getting-started/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql-provider
我试图使用 Entity Framework.
建立到我的 MySQL 数据库的连接
连接成功,但每当我 运行 我的代码时,我都会收到以下错误:
MySql.Data.MySqlClient.MySqlException: Table 'helpcontext.users' doesn't exist
我的上下文 class 看起来像这样:
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class HelpContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Channel> Channels { get; set; }
public DbSet<ChatMessage> ChatMessages { get; set; }
public DbSet<Question> Questions { get; set; }
public DbSet<QuestionComment> QuestionComments { get; set; }
public HelpContext() : base()
{
Database.SetInitializer(new MySqlInitializer());
}
}
我的 "MySQLInitializer" class 看起来像这样:
public class MySqlInitializer : IDatabaseInitializer<HelpContext>
{
public void InitializeDatabase(HelpContext 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'",
"helpcontext"));
// 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();
}
}
}
}
架构在 mysql 实例上创建正常,但没有创建任何表,导致应用程序因上述错误而崩溃。
知道我做错了什么吗?
编辑:
事实证明,问题来自于较早的尝试,即针对未创建表的原始问题遵循其他解决方案。
我在上下文中有这段代码 class
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().MapToStoredProcedures();
modelBuilder.Entity<Channel>().MapToStoredProcedures();
modelBuilder.Entity<ChatMessage>().MapToStoredProcedures();
modelBuilder.Entity<Question>().MapToStoredProcedures();
modelBuilder.Entity<QuestionComment>().MapToStoredProcedures();
}
事实证明那很糟糕。从我的 class 中删除方法解决了这个问题。
原来我的代码中还有另一个问题。有关详细信息,请参阅编辑。
遵循本指南:http://www.asp.net/identity/overview/getting-started/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql-provider
我试图使用 Entity Framework.
建立到我的 MySQL 数据库的连接
连接成功,但每当我 运行 我的代码时,我都会收到以下错误:
MySql.Data.MySqlClient.MySqlException: Table 'helpcontext.users' doesn't exist
我的上下文 class 看起来像这样:
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class HelpContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Channel> Channels { get; set; }
public DbSet<ChatMessage> ChatMessages { get; set; }
public DbSet<Question> Questions { get; set; }
public DbSet<QuestionComment> QuestionComments { get; set; }
public HelpContext() : base()
{
Database.SetInitializer(new MySqlInitializer());
}
}
我的 "MySQLInitializer" class 看起来像这样:
public class MySqlInitializer : IDatabaseInitializer<HelpContext>
{
public void InitializeDatabase(HelpContext 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'",
"helpcontext"));
// 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();
}
}
}
}
架构在 mysql 实例上创建正常,但没有创建任何表,导致应用程序因上述错误而崩溃。 知道我做错了什么吗?
编辑: 事实证明,问题来自于较早的尝试,即针对未创建表的原始问题遵循其他解决方案。 我在上下文中有这段代码 class
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().MapToStoredProcedures();
modelBuilder.Entity<Channel>().MapToStoredProcedures();
modelBuilder.Entity<ChatMessage>().MapToStoredProcedures();
modelBuilder.Entity<Question>().MapToStoredProcedures();
modelBuilder.Entity<QuestionComment>().MapToStoredProcedures();
}
事实证明那很糟糕。从我的 class 中删除方法解决了这个问题。
原来我的代码中还有另一个问题。有关详细信息,请参阅编辑。