1
我想那個移動使用EF 6 EF睿2EF核2.0遷移命名約定
的移民在老項目產生了一個數據庫的項目「DBO」。一切的前綴,例如表是「dbo.Something」,外鍵是「FK_dbo.Something_dbo.SomethingElse_Id」。
但EF核心不遵循這個慣例,它留下了「dbo」。
有沒有辦法讓EF Core遵循舊的約定,所以我現有的數據庫將仍然工作?
我想那個移動使用EF 6 EF睿2EF核2.0遷移命名約定
的移民在老項目產生了一個數據庫的項目「DBO」。一切的前綴,例如表是「dbo.Something」,外鍵是「FK_dbo.Something_dbo.SomethingElse_Id」。
但EF核心不遵循這個慣例,它留下了「dbo」。
有沒有辦法讓EF Core遵循舊的約定,所以我現有的數據庫將仍然工作?
您可以使用DbContext
的OnModelCreating
方法更改命名約定。以下是blog post I wrote的示例:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Singularize table name
// Blogs => Blog
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
// Add NuGet package "Humanizer" to use Singularize()
entityType.Relational().TableName = entityType.Relational().TableName.Singularize();
}
// Prefix column names with table name
// Id => Blog_Id
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
foreach (var property in entityType.GetProperties())
{
property.Relational().ColumnName = entityType.Relational().TableName + "_" + property.Relational().ColumnName;
}
}
// Rename Foreign Key
// FK_Post_Blog_BlogId => FK_Post_Blog_BlogId_Test
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
foreach (var property in entityType.GetProperties())
{
foreach (var fk in entityType.FindForeignKeys(property))
{
fk.Relational().Name = fk.Relational().Name + "_Test";
}
}
}
// Rename Indices
// IX_Blog_Url => IX_Blog_Url_Test
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
foreach (var index in entityType.GetIndexes())
{
index.Relational().Name = index.Relational().Name + "_Test";
}
}
}
}