sql - NPoco 纯 SQL 请求,其中的表、列名从数据库映射中替换?

标签 sql orm npoco

假设我有我的数据类

[TableName("some_table")]
public class MyData 
{
 [ColumnName("some_column") 
 public string Name {get;set;}
}

现在我想对我的表执行简单的 SQL 查询,但我不想在查询中对表/列名称进行硬编码。 例如。 “update some_table set some_column = Replace(some_column, '...', '...')” 不好,因为表、列名被硬编码到请求中。 我更喜欢类似“update {{ MyData }} set {{ Name }} = ...”的内容,其中 {{ MyData }} {{ Name }} 将替换为 NPoco 数据库映射中的表、列名称。 是否可以从 NPoco 数据库检索此信息?

最佳答案

我最终想出了这些扩展方法,可以从属性的类型和列名中检索表名:

public static class NPOCOExtensions
{
    public static string GetTableNameFromType<T>(this Database db)
    {
        return db.PocoDataFactory.TableInfoForType(typeof(T)).TableName;
    }

    public static string GetColumnNameFromProperty<T>(this Database db, Expression<Func<T, object>> selector)
    {
        var memberName = ((MemberExpression)selector.Body).Member.Name;
        var columnName = db.PocoDataFactory.ForType(typeof(T)).Members.Where(x => x.Name == memberName).First().PocoColumn.ColumnName;
        return columnName;
    }
}

关于sql - NPoco 纯 SQL 请求,其中的表、列名从数据库映射中替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39829131/

相关文章:

sql - 表 'tableName'包含约束定义,该约束定义的列 'columnName'不在表Java Derby中

mysql - 不能 UNION ALL 两个等价的查询吗?

java - JPA @PersistenceContext 注释的 JDO 等效项是什么

php - 默认情况下将 propel 设置为日期格式 getDate ("Y-m-d"),以便更好地与 zend toArray() 一起使用

c# - 使用 NPOCO 映射复杂类

c# - npoco.Insert<T> 在带有 OUT AutoIncrement 主键的表上失败

mysql - 有什么办法可以提高 GROUP BY 的性能吗?

mysql - 在 MySQL 中确定给定数字的因子数而不重叠

orm - 在 CakePHP 3 Controller 中保存相关数据

c# - NPOCO Fetch - 对象必须实现 IConvertible