我正在尝试将使用EF 6的项目移动到EF Core 2。
旧项目中的迁移产生了一个带有" dbo的数据库。"所有内容的前缀,例如表格是" dbo.Something",外键是" FK_dbo.Something_dbo.SomethingElse_Id"。
但是EF Core并没有遵循这个惯例,它排除了" dbo。"。
有没有办法让EF Core遵循旧约定,这样我现有的数据库仍然有效?
答案 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;
}
}