Entity framework core 实体框架核心2中的AssociationType等效于什么?

Entity framework core 实体框架核心2中的AssociationType等效于什么?,entity-framework-core,Entity Framework Core,我使用一个约定(IStoreModelConvention),需要知道AssociationType.IsForeignKey是否为true。目标是重命名映射表中的所有外键。例如,删除下划线并组成一个从类和属性名称派生的全新名称 问题是:实体框架Core 2中存在与AssociationType.IsForeignKey等效的对象,或者我如何实现这种类型的自定义?EF Core 2具有不同(或更好)的ForeignKey命名系统。名称构造为FK_Table\u ReferencedTable\f

我使用一个约定(IStoreModelConvention),需要知道AssociationType.IsForeignKey是否为true。目标是重命名映射表中的所有外键。例如,删除下划线并组成一个从类和属性名称派生的全新名称

问题是:实体框架Core 2中存在与AssociationType.IsForeignKey等效的对象,或者我如何实现这种类型的自定义?

EF Core 2具有不同(或更好)的ForeignKey命名系统。名称构造为
FK_Table\u ReferencedTable\fku properties
,其中Table是定义FK约束的位置。ReferencedTable是主体侧。FKProperties是外键属性的分隔列表。也许它会匹配你想要的命名系统

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // Configure model
    foreach (var entityType in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var declaredForeignKey in entityType.GetDeclaredForeignKeys())
        {
            declaredForeignKey.Relational().Name = "<Construct_FK_Name>";
        }
    }
}
尽管如此,如果您仍然希望自定义外键属性的名称,那么在ef core中还没有用户定义的约定支持。但是EF Core允许您迭代模型元数据,以您想要的方式对其进行配置。在派生的
DbContext
中的
OnModelCreating
方法中,可以根据需要将以下代码命名为FK

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // Configure model
    foreach (var entityType in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var declaredForeignKey in entityType.GetDeclaredForeignKeys())
        {
            declaredForeignKey.Relational().Name = "<Construct_FK_Name>";
        }
    }
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
//配置模型
foreach(modelBuilder.Model.GetEntityTypes()中的var entityType)
{
foreach(entityType.GetDeclaredForeignKeys()中的var declaredForeignKey)
{
declaredForeignKey.Relational().Name=“”;
}
}
}