c# - Entity Framework 在哪里存储属性名称和它在 SQL 中选择的列之间的映射?

标签 c# sql linq entity-framework

我正在尝试使用 ObjectQuery 的 ToTraceString() 在 EF (4.3) 上构建一些自定义扩展,以从 LINQ 代码生成原始 SQL。

我注意到,虽然在某些情况下,SQL 中列的名称与查询元素类型的属性名称相匹配,但在其他情况下,它们被命名为 C1、C2 等。这让我很难理解对生成的 SQL 执行任何操作。有谁知道如何将这些列名称映射回属性名称(我只关心能够对平面元组(如匿名类型)执行此操作,如果有帮助的话,我不需要任何层次结构)。

依赖私有(private)/内部反射的解决方案是完全可以接受的。我了解我可能需要根据 future 的 EF 版本对其进行调整。另外,如果有帮助,我只会使用 MS SqlServer (2008+)。

最佳答案

我刚刚提出并回答了一个类似的问题(您可以忽略所有 DataTable 内容,但它可能很有用,因为它显示了如何使用映射):

Entity Framework - IQueryable to DataTable

显示如何获取对象属性位置和 SQL 语句列位置之间的映射的原始帖子可以在这里找到:

How does Entity Framework manage mapping query result to anonymous type?

注意:第二个链接仅提供对象属性和 SQL 语句列之间的位置(作为整数值)的映射...您将拥有使用反射获取实际的对象属性名称,然后对 SQL 语句进行某种字符串分析以获取 SQL 语句列名称(您可以为此使用正则表达式,但这可能有点矫枉过正)。

关于c# - Entity Framework 在哪里存储属性名称和它在 SQL 中选择的列之间的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073001/

相关文章:

c# - 在二叉搜索树 C# 中查找节点值

c# - 将同一文件从多个线程复制到多个目的地

c# - ADO.NET:无法连接到 mdf 数据库文件

java - 一个实体可以有多个多对多关系吗?

c# - 使用 linq 按该对象的 2 个属性对对象列表进行排序

c# - EventHandler 在 .dll 中始终为 null,从另一个类订阅

sql - SQL Server 2005 中的模数时间 - 每 n 小时返回一次数据

sql - 在调试 SQL 查询时需要帮助

c# - INNER 和 OUTER Join 的 LINQ 方法语法

c# - 是否有将 IQueryable<T> lambda 表达式转换为 SQL 字符串的 api 或扩展?