You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Linq2DB的Table特性中获取数据库表名?

获取Linq2DB实体类的表名方法

Linq2DB本身提供了官方API来获取实体类对应的表名,比手动反射更可靠,同时也可以封装成你想要的类似Example.GetTableName()的方法,具体实现如下:

使用Linq2DB内置的MappingSchema获取

Linq2DB的映射信息都存储在MappingSchema中,你可以通过它的GetEntityDescriptor方法获取实体的映射详情,包括表名:

方式1:通过DataConnection实例获取

如果你已经创建了DataConnection(或其派生类,比如自定义的DbContext),直接从实例的MappingSchema中读取:

using LinqToDB;
using LinqToDB.Mapping;

// 假设db是你的DataConnection实例
var tableName = db.MappingSchema.GetEntityDescriptor(typeof(Example)).TableName;
// 结果为"EXAMPLE_ONLINE"

方式2:使用默认MappingSchema

如果没有现成的DataConnection实例,可直接用全局默认的MappingSchema:

var tableName = MappingSchema.Default.GetEntityDescriptor(typeof(Example)).TableName;

封装成静态方法(实现类似Example.GetTableName()的调用)

你可以自己封装静态方法,让调用更简洁:

方案1:通用扩展方法(适用于所有实体)

public static class EntityTableNameHelper
{
    public static string GetTableName<T>()
    {
        return MappingSchema.Default.GetEntityDescriptor(typeof(T)).TableName;
    }
}

// 调用示例
var exampleTableName = EntityTableNameHelper.GetTableName<Example>();

方案2:实体类内的静态方法

直接在Example类中添加静态方法,完全符合你想要的调用形式:

[Table(@"EXAMPLE_ONLINE")]
public class Example
{
    [Column(@"ID_EXAMPLE")]
    public ulong IdExample { get; set; }
    [Column(@"DESCRIPTION")]
    public string Description { get; set; }

    public static string GetTableName()
    {
        return MappingSchema.Default.GetEntityDescriptor(typeof(Example)).TableName;
    }
}

// 直接调用
var tableName = Example.GetTableName();

不推荐:手动反射读取TableAttribute

虽然可以通过反射直接读取TableAttribute的Name属性,但这种方式无法处理Linq2DB的高级映射逻辑(比如多数据库表名适配、动态表名替换等),仅适用于简单场景:

using System.Reflection;
using LinqToDB.Mapping;

var tableAttr = typeof(Example).GetCustomAttribute<TableAttribute>();
var tableName = tableAttr?.Name;

注意:优先使用Linq2DB官方的MappingSchema方式,确保表名获取的准确性,尤其是在涉及复杂映射配置时。

内容的提问来源于stack exchange,提问作者qhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:00:48