C# 如何从Fluent Api检索实体配置

C# 如何从Fluent Api检索实体配置,c#,.net,entity-framework,entity-framework-6,ef-fluent-api,C#,.net,Entity Framework,Entity Framework 6,Ef Fluent Api,使用Entity Framework 6,我可以通过Fluent Api设置配置,如下所示: public class ApplicationUserConfiguration : EntityTypeConfiguration<ApplicationUser> { public ApplicationUserConfiguration() { this.HasKey(d => d.Id); this.Ignore(d =>

使用Entity Framework 6,我可以通过Fluent Api设置配置,如下所示:

public class ApplicationUserConfiguration : EntityTypeConfiguration<ApplicationUser>
{
    public ApplicationUserConfiguration()
    {
        this.HasKey(d => d.Id);
        this.Ignore(d => d.UserId);
    }
}
公共类ApplicationUserConfiguration:EntityTypeConfiguration

使用属性方法,我可以通过反射知道什么是属性角色,但我想知道如何检索这些配置,例如使用Fluent-Api方法检索
Key

EntityTypeConfiguration
类中没有公共属性

有没有可能以某种方式获取
外键

有一个类,它提供API来检索实体框架的存储、模型、CLR类型和映射的元数据

表示所需的ADO.NET元数据运行时服务组件 提供对从各种源检索元数据的支持

有一个
DbContext
的实例,您可以使用以下代码找到它的
MetadataWorkspace

var metadataWorkspace = ((IObjectContextAdapter)dbContext).ObjectContext.MetadataWorkspace;
然后,您可以获得包含不同类型模型的项集合,包括对象模型、概念模型、存储(数据库)模型以及概念模型和存储模型之间的映射模型

对于给定的clr类型,以下扩展方法返回:

using System;
using System.Data.Entity;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Infrastructure;
using System.Linq;

public static class DbContextExtensions
{
    public static EntityType GetEntityMetadata<TEntity>(this DbContext dbContext)
    {
        if (dbContext == null)
            throw new ArgumentNullException(nameof(dbContext));

        var metadataWorkspace = ((IObjectContextAdapter)dbContext)
            .ObjectContext.MetadataWorkspace;
        var itemCollection = ((ObjectItemCollection)metadataWorkspace
            .GetItemCollection(DataSpace.OSpace));
        var entityType = metadataWorkspace.GetItems<EntityType>(DataSpace.OSpace)
            .Where(e => itemCollection.GetClrType(e) == typeof(TEntity)).FirstOrDefault();

        if (entityType == null)
            throw new Exception($"No entity mapped to CLR type '{typeof(TEntity)}'.");

        return entityType;
    }
}

fluent API用于配置实体/关系,而不是获取/显示constraints@GkMoreira这有用吗@ChristianGollhardt之前有人建议使用metadataworkspace。经过一些研究,我用这种方法找到了答案。现在它已经可以使用了,我将详细说明一个答案,我已经实现了这个答案来帮助任何有同样需要的人。@ChristianGollhardt事实上它是这样的。谢谢,很好!这正是我需要的。感谢相关-本文帮助我理解并开发了解决方案:
IObjectContextAdapter
在.NetCore 2.2中仍然可用吗?我似乎找不到对System.Data.Entity的引用。@RHarris该问题用Entity Framework 6标记。这与EF core无关。
var keys = dbcontext.GetEntityMetadata<Category>().KeyProperties.Select(x=>x.Name).ToList();