[mysql]EF6 代码第一次迁移架构名称重复

发布时间: 2017/4/4 14:53:30
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

更新数据库输出此错误。

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`

这是 db 迁移是什么样子...

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",它工作,但这似乎不正确。我错过了什麽吗?

解决方法 1:

解决方案取决于什么您的命名命中注定。 如果您的数据库名称是 external_service,你想要被称为产品的表,指定︰

[Table("products")]

这将创建具有完全限定的名称表 external_service.products 。 在 SQL server 中,这将是 external_service.dbo.products (或 external_service..products ,dbo 是默认架构的名称。

如果你实际上想调用数据库中的 external_service 架构中创建表产品,也称为 external_service,那么你可以用

[Table("products", Schema = "external_Service")]

这将创建一个完全限定的表名的 external_service.external_service.products

你也提到你改变一些东西,并重新创建您的迁移后,它试图重命名或移动表。 这表明,当创建初始迁移,你已经不会删除旧版本。 要重新创建初始迁移,撤消第一个,然后重新创建新的一个︰

Update-Database -TargetMigration:0
Add-Migration 1.0.1 -Force
官方微信
官方QQ群
31647020