【问题标题】:Getting metadata in EF Core: table and column mappings在 EF Core 中获取元数据:表和列映射
【发布时间】:2022-03-11 00:11:20
【问题描述】:

希望在 EF Core 中获取元数据,以处理对象和属性到数据库表和列的映射。

这些映射在 DBContext.cs OnModelCreating() 方法中定义,使用 .ToTable() 映射表,通过 .Property.HasColumnName() 映射列。

但我没有在...返回的实体类型下看到此元数据

IEnumerable<IEntityType> entityTypes = [dbContext].Model.GetEntityTypes();

此元数据在 EF Core 中的任何位置都可用吗?

【问题讨论】:

    标签: entity-framework-core


    【解决方案1】:

    此元数据在 EF Core 中的任何位置都可用吗?

    是的。除了属性之外,还要检查方法(GetXXXFindXXX 等)。并特别注意Relational()扩展方法。

    例如:

    foreach (var entityType in dbContext.Model.GetEntityTypes())
    {
        var tableName = entityType.Relational().TableName;
        foreach (var propertyType in entityType.GetProperties())
        {
            var columnName = propertyType.Relational().ColumnName;
        }
    }
    

    您需要安装 Microsoft.EntityFrameworkCore.Relational Nuget 包。

    更新(EF Core 3.0+): Relational() provider extensions have been removed 和属性已被直接替换为 Get / Set 扩展方法,所以现在列/表名称的代码简直就是

    var tableName = entityType.GetTableName();
    // ..
    var columnName = propertyType.GetColumnName();
    

    更新(EF Core 5.0+): 由于现在 EF Core 支持表、视图、sql 等的单独列名映射,因此您必须将所需的 StoreObjectIdentifier 传递给 GetColumnName 方法,例如

    var tableName = entityType.GetTableName();
    var tableIdentifier = StoreObjectIdentifier.Table(tableName, entityType.GetSchema());
    // ...
    var tableColumnName = propertyType.GetColumnName(tableIdentifier);
    

    【讨论】:

    • 我们可以对此有任何参考吗?
    • @Sampath 我在任何地方都找不到 EF Core 类文档。我只有 VS Intellisense。
    • 嗯..我也试图找到那个。没有成功。无论如何+ 1 供您查找:)
    • 谢谢,我会调查的。有时,在 EF Core 中寻找自己的方式就像大海捞针 ;-)
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多