什么等效于实体框架核心 2 中的关联类型?



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

问题是:在实体框架核心 2 中存在等效的 AssociationType.IsForeignKey,或者如何完成这种类型的自定义?

EF Core 2 具有不同(或更好(的外键命名系统。该名称构造为FK_Table_ReferencedTable_FKProperties其中 Table 是定义 FK 约束的位置。引用表是主端。FKProperties 是_外键属性的单独列表。也许它会匹配您想要的命名系统。

但是,如果仍要自定义外键属性的名称,则在 ef core 中尚无用户定义的约定支持。但 EF Core 允许你循环访问模型元数据,以按所需方式对其进行配置。在派生DbContextOnModelCreating方法中,您可以根据需要放置以下代码来命名 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>";
}
}
}

以及下面的强类型版本(带有"using"语句(

using Microsoft.EntityFrameworkCore.Metadata;
foreach (IEntityType entityType in this.entityDbContext.Model.GetEntityTypes())
{
foreach (IForeignKey declaredForeignKey in entityType.GetDeclaredForeignKeys())
{
}
}

最新更新