EF Core 2.0迁移命名约定

时间:2017-09-26 02:30:11

标签: entity-framework ef-migrations

我正在尝试将使用EF 6的项目移动到EF Core 2。

旧项目中的迁移产生了一个带有" dbo的数据库。"所有内容的前缀,例如表格是" dbo.Something",外键是" FK_dbo.Something_dbo.SomethingElse_Id"。

但是EF Core并没有遵循这个惯例,它排除了" dbo。"。

有没有办法让EF Core遵循旧约定,这样我现有的数据库仍然有效?

2 个答案:

答案 0 :(得分:0)

您可以使用OnModelCreating的{​​{1}}方法更改命名约定。以下是blog post I wrote

的示例
DbContext

答案 1 :(得分:0)

没有直接的方法可以实现这一目标。唯一的方法是手动构造PK和FK名称。重写DBContext的OnModelCreating方法,如下所示。如果您已经在OnModelCreating中定义了,那么请确保将代码粘贴到最后(如果您的API流畅,则在此之后)。

    protected override void OnModelCreating(ModelBuilder builder)
    {
        foreach (var pk in builder.Model
                    .GetEntityTypes()
                    .SelectMany(t => t.GetKeys()))
        {
            pk.Relational().Name = "PK_dbo." + pk.DeclaringEntityType.ClrType.Name;
        }

        foreach (var fk in builder.Model
                .GetEntityTypes()
                .SelectMany(t => t.GetForeignKeys()))
        {
            fk.Relational().Name = "FK_dbo." + fk.DeclaringEntityType.ClrType.Name +
                                     "_dbo." + fk.PrincipalEntityType.ClrType.Name +
                                         "_" + fk.Properties.First().Name;
        }
    }