目前我有一个使用Entity Framework 6.1.3和Sql Server 2012的应用程序。我为我的数据库使用Code first migration方法。在Sql Server DB中,我创建了具有模式名称作为表前缀的表,例如TestDB.TestSchema.tblXyz,其中TestDB是我的数据库,TestSchema是我的模式名称。
现在我想更改我的应用程序以使用MySql数据库并遵循相同的表名和模式约定。
我重写了HistoryContext类的onModelCreating方法,为表添加了一个前缀,如下所示,
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema("TestSchema");
modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(128).IsRequired();
modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
}
但是当我在包管理器控制台中运行update-database -verbose命令时,它给出了错误 “表' TestDB .__ MigrationHistory '不存在”。
以下是运行迁移时生成的脚本的一部分:
create table `TestSchema.__MigrationHistory` (`MigrationId` varchar(128)
not null ,`ContextKey` varchar(200) not null ,`Model` longblob
not null,`ProductVersion` varchar(32) not null ,primary key (
`MigrationId`,`ContextKey`) ) engine=InnoDb auto_increment=0
INSERT INTO `__MigrationHistory`( ...
正如您在插入__MigrationHistory表时所看到的那样,它没有为模式名称添加前缀。因此导致上述错误。
还有其他人遇到过同样的问题吗?在这里可以做些什么来使实体框架选择正确的表名?
...谢谢
答案 0 :(得分:0)
您必须删除此行:
modelBuilder.HasDefaultSchema("TestSchema");
然后EF停止为每个表名添加模式前缀。 表将在连接字符串中指定的表空间中创建(参数&#34;初始目录= ...&#34;是app.config)。