繁体   English   中英

EF6代码优先迁移中的架构名称重复

[英]Schema name duplication in EF6 code first migration

Update-Database正在输出此错误。

Table 'external_service.external_service.products' doesn't exist

这是一些Update-Database -Verbose输出。

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,并且希望将该表称为product,请指定:

[Table("products")]

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

如果您实际上是试图在数据库中也称为external_service的模式下以外部_服务的模式创建表产品,则可以使用

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

这将创建标准表名称external_service.external_service.products

您还提到过,在更改了某些内容并重新创建了迁移之后,它试图重命名或移动表。 这表明在创建初始迁移时,您尚未删除旧版本。 要重新创建初始迁移,请撤消第一个迁移,然后重新创建新迁移:

Update-Database -TargetMigration:0
Add-Migration 1.0.1 -Force

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM