EF6 代码首次迁移中的架构名称重复
Schema name duplication in EF6 code first migration
更新数据库正在输出此错误。
Table 'external_service.external_service.products' doesn't exist
这是一些更新数据库的详细输出。
Target database is: 'external_service' (DataSource: something, Provider: MySql.Data.MySqlClient, Origin: Configuration).
Applying explicit migrations: [201503091803430_1.0.1].
Applying explicit migration: 201503091803430_1.0.1.
alter table `external_service.products` drop column `test`
这就是数据库迁移的样子...
public partial class _101 : DbMigration
{
public override void Up()
{
DropColumn("external_service.products", "test");
}
public override void Down()
{
AddColumn("external_service.products", "test", c => c.Boolean(nullable: false));
}
}
这是POCO
// Both of these generate the same thing. :/
//[Table("external_service.products")]
//[Table("products", Schema = "external_service")]
[Table("products")]
public partial class Product
{
[Column("productid")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long ProductID { get; set; }
[Column("visible")]
public bool Visible { get; set; }
}
这是迁移配置
internal sealed class Configuration : DbMigrationsConfiguration<SoundDevices.DataAccessLayer.Context.ExternalServiceContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\ExternalService";
}
protected override void Seed(SoundDevices.DataAccessLayer.Context.ExternalServiceContext context)
{
}
}
我将 EF 6.1.2 与 MySql.Data.Entity 6.9.6 & MySql.Data 6.9.6
一起使用
如果我从 DbMigration 中手动删除 "external_service",它可以工作,但这似乎不正确。我错过了什么吗?
解决方案取决于您的命名意图。如果您的数据库名称是 external_service 并且您希望将 table 称为产品,请指定:
[Table("products")]
这将创建一个具有完全限定名称 external_service.products
的 table。在 SQL 服务器中,这将是 external_service.dbo.products
(或 external_service..products
,因为 dbo 是默认架构的名称。
如果您实际上试图在数据库中名为 external_service 的模式(也称为 external_service 中创建 table 产品,那么您将使用
[Table("products", Schema = "external_Service")]
这将创建 external_service.external_service.products
的完全限定 table 名称。
您还提到,在您更改某些内容并重新创建迁移后,它会尝试重命名或移动 table。这表明在创建初始迁移时,您没有删除旧版本。要重新创建初始迁移,请撤消第一个迁移,然后重新创建新迁移:
Update-Database -TargetMigration:0
Add-Migration 1.0.1 -Force
更新数据库正在输出此错误。
Table 'external_service.external_service.products' doesn't exist
这是一些更新数据库的详细输出。
Target database is: 'external_service' (DataSource: something, Provider: MySql.Data.MySqlClient, Origin: Configuration).
Applying explicit migrations: [201503091803430_1.0.1].
Applying explicit migration: 201503091803430_1.0.1.
alter table `external_service.products` drop column `test`
这就是数据库迁移的样子...
public partial class _101 : DbMigration
{
public override void Up()
{
DropColumn("external_service.products", "test");
}
public override void Down()
{
AddColumn("external_service.products", "test", c => c.Boolean(nullable: false));
}
}
这是POCO
// Both of these generate the same thing. :/
//[Table("external_service.products")]
//[Table("products", Schema = "external_service")]
[Table("products")]
public partial class Product
{
[Column("productid")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long ProductID { get; set; }
[Column("visible")]
public bool Visible { get; set; }
}
这是迁移配置
internal sealed class Configuration : DbMigrationsConfiguration<SoundDevices.DataAccessLayer.Context.ExternalServiceContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\ExternalService";
}
protected override void Seed(SoundDevices.DataAccessLayer.Context.ExternalServiceContext context)
{
}
}
我将 EF 6.1.2 与 MySql.Data.Entity 6.9.6 & MySql.Data 6.9.6
一起使用如果我从 DbMigration 中手动删除 "external_service",它可以工作,但这似乎不正确。我错过了什么吗?
解决方案取决于您的命名意图。如果您的数据库名称是 external_service 并且您希望将 table 称为产品,请指定:
[Table("products")]
这将创建一个具有完全限定名称 external_service.products
的 table。在 SQL 服务器中,这将是 external_service.dbo.products
(或 external_service..products
,因为 dbo 是默认架构的名称。
如果您实际上试图在数据库中名为 external_service 的模式(也称为 external_service 中创建 table 产品,那么您将使用
[Table("products", Schema = "external_Service")]
这将创建 external_service.external_service.products
的完全限定 table 名称。
您还提到,在您更改某些内容并重新创建迁移后,它会尝试重命名或移动 table。这表明在创建初始迁移时,您没有删除旧版本。要重新创建初始迁移,请撤消第一个迁移,然后重新创建新迁移:
Update-Database -TargetMigration:0
Add-Migration 1.0.1 -Force